however in a multi-level tree where the nodes to moved have children, this does not work
True, looks like removing and adding back an item with children does indeed clear its hierarchy in the TreeData. The data structure should have APIs for operations such as this. Please report at https://github.com/vaadin/flow/issues