Thanks for taking the time to help, people.
As predicted, it was some other problem. The full definition of the CXTemplate class was like this:
class CGraphics;class CXTemplate{public: typedef bool (CGraphics::*TEMP_HANDLER)(CMesh* pMesh, CXFileObject*);private: TEMP_HANDLER m_pHandler; std::string m_strName;...}
... and it seems that once the full definition of CGraphics got pulled in the code that used CXTemplate, it affected the memory layout. It's a minor shame to have to introduce a dependency on Graphics.h into all files that use XTemplate.h, but not the end of the world - at least it works now!