When you aim to change the scene you have to remove the player from the existing scene first. If you call a scene change first it will free all its children. Usually everything is queued to be freed. At that point it doesn't matter if you remove the player from the scene, it's too late and has been queued to be freed.
Since it's queue_free()'d you should be able to validly move it during the code, because it won't go null
until after your code is executed. Then the reference is lost in the next frame.
Some pseudo code of the process.
player = get_player()
player.get_parent().remove_child(player) # Take player out first.
change_scene()
get_current_scene().add_child(player)
player.position = get_spawner().global_position