Dim returnXDoc As New XmlDocument(xDoc.NameTable)
returnXDoc = xDoc.Clone()
Первая строка здесь избыточна - вы создаете экземпляр XmlDocument, а затем переназначаете переменную:
Dim returnXDoc As XmlDocument = xDoc.Clone()
Это то же самое.
Поскольку вы, кажется, вставляете каждый XmlNode из списка узлов в другое место в новом XmlDocument, тогда я не могу понять, как вы могли бы сделать это любым другим способом.
Могут быть более быстрые выражения XPath, которые вы можете написать, например, предварительное ожидание выражения XPath с "//" - это почти всегда самый медленный способ сделать что-то, особенно если ваш XML хорошо структурирован. Вы не показали свой XML, поэтому я не мог прокомментировать это далее.