В документации SelectNodes четко сказано: «Объект XmlNodeList, возвращаемый этим методом, будет действительным, пока базовый документ остается неизменным. Если базовый документ изменяется, могут возвращаться непредвиденные результаты (исключений не будет) выброшен). "
Так что то, что вы испытываете с вашим XmlNodeList, возвращаемым из SelectNodes после того, как вы манипулируете документом, может не соответствовать вашим ожиданиям, а соответствует документации. Вам придется снова вызывать SelectNodes, чтобы получить новый XmlNodeList, если вы манипулируете документом.
На мой взгляд, разработчики реализации DOM в .NET Framework допустили ошибку, используя XmlNodeList в качестве абстрактного класса для конкретной реализации с совершенно другим поведением. Если вы используете, например, Затем ChildNodes вы получаете «живой» список узлов в соответствии с требованиями спецификации W3C DOM, поэтому в этом случае изменение документа автоматически изменяет список узлов (при необходимости). Однако SelectNodes возвращает список узлов с совершенно другим поведением, как вы уже видели.