Yep, I had forgotten about the Partial Cache settings for the text field, which are great for performance but make chaos for Macros.
I was able to solve my issue by creating an ad-hoc template and removing the Partial Cache from that field, now the content is loaded fresh each time it is viewed and the macro is fired on page load as expected.
Is there another way to bypass the Partial Cache? maybe from within the macro? The ad-hoc solution works for this instance, but it isn't really scalable.
Thanks again everyone.