The move method reads the contents of the destination node in the transaction/invocation context before locking it.
If there are multiple parallel movers with the same destination, some of the moved nodes might be lost. This sometimes happens in NodeMoveAPIPessimisticTest, causing random failures.
Note that even if the move() method locks the destination node, it will still be possible for the user to read the destination node in the same transaction and cause data loss. The move() method documentation should warn about this.