The XPathNavigator Clone() method only creates a copy of the XPathNavigator, not the node and its children, so this code:
XPathNavigator root = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:group15/my:group16/my:group14", NamespaceManager);
root = root.Clone();
is no different from this:
XPathNavigator root = MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:group15/my:group16/my:group14", NamespaceManager);
root = root.Clone();
AppendChild() does create a copy of the node tree leaving the XPathNavigator as it was, so the result is that you are continually piling new children onto parentRoot every time the inner loop finishes, and then adding a copy of that to parentRoot1 at the end of each iteration of the outer root.