The problem is that when a triangle is deleted by the user in civil 3d, it seems the triangles definition remains in the surface but it is marked as deleted. When the surface is exported to XML, the deleted triangles are exported as well but have an extra attribute which tells software to "ignore" the triangles. The problem is that the majority of software that digest the xml files don't acknowledge or know about the ignore attribute, so the triangles that were deleted in civil 3d, get imported and used by other software.
If you look through the xml file you attached you will see some of the face definitions have i="1" in them. These are the surface triangles(faces) that are supposed to be ignored. See sample below.
<F n="146 148 151">624 32 33</F>
<F i="1" n="156 147 149">623 33 32</F> <= note ignore attribute
<F i="1" n="148 150 1322">623 32 622</F> <= note ignore attribute
<F i="1" n="1348 149 142">646 622 32</F> <= note ignore attribute
<F n="1350 147 152">625 624 33</F>
The only way I have found to get a clean surface is to extract the triangles from the surface in civil 3d, then create a new surface from those triangles and then export that surface to xml.
If a post provides a fix for your issue, click on "Accept as Solution" to help other users find solutions to problems they might have that are similar to yours.
Andrew Puller
Maitland, NSW, Australia
Windows 11
Intel core i7 11800 @ 2.30 GHz with 32GB Ram
Civil 3d 2023