Thanks Elliot, yes – it was a $post issue.
It appears something else further up in the template had been using a $post variable which just happened to be set to the original page. A global $post and some sensible variable renaming has sorted out the problem.
Thanks for your patience! 🙂