The problem with setText()

Yes, this is a problem with all classes that inherit from NodePath (which is why it’s considered an anti-pattern), since NodePaths aren’t actually stored in the scene graph.

You can still manipulate the underlying TextNode, though, like this:

elements = render2d.findAllMatches("**/+TextNode")
for i in elements:
    i.node().setText('New')