Process of elimination: I set a breaktrap at GetChildXmlValByName. Before reading, m_iHealth was at it's initialization value, 0. After, it was a huge and illegible number. GetChildXmlValByName is working fine for all the other objects. CvBuildingInfo::read(CvXMLLoadUtility* pXML) is called from the .exe (Right?), so pXML would have no way of being corrupted.
Therefore, the error must lie somewhere in the building XML files.
So why am I not getting an XML error or a schema-style game crash?