### Godot version

4.1.x

### System information

Windows 11

### Issue description

When a Tilemap node is attached as a child node of PathFollower2D node, with `collision_animatable` on in the inspector, the tilemap will stuck at (0, 0) if you scripted the movement of the PathFollower2D node with `progress` changed; while the tiles run as usual if `collision_animatable` is **false**.
This is very weird because the documentation said that "you can make Animatablebody2D move with script", and I used but it feedbacked a strange result, which is unacceptable and unwilling to see.
More detailed info please see the minimal project

P.S. Only under PathFollower2D, you add a RemoteTransformer2D that linked to a Tilemap can the tiles move as usual with `collision_animatable` on.

### Steps to reproduce

In the minimal reproduction project:

1. Make the `collision_animatable` of Tilemap and run the project, and you can see the tilemap moves as usual
2. Then tick on the property and run the game again, in which you can see the tilemap stuck at (0, 0) permanently.

### Minimal reproduction project

[bug report.zip](https://github.com/godotengine/godot/files/12094949/bug.report.zip)
void _navigation_update();
	void _navigation_cleanup();
	void _navigation_update_dirty_quadrants(SelfList<TileMapQuadrant>::List &r_dirty_quadrant_list);
	void _navigation_cleanup_quadrant(TileMapQuadrant *p_quadrant);
	void _navigation_draw_quadrant_debug(TileMapQuadrant *p_quadrant);
	HashSet<Vector2i> instantiated_scenes;
	void _scenes_update_dirty_quadrants(SelfList<TileMapQuadrant>::List &r_dirty_quadrant_list);
	void _scenes_cleanup_quadrant(TileMapQuadrant *p_quadrant);
	void _scenes_draw_quadrant_debug(TileMapQuadrant *p_quadrant);
	
	void _build_runtime_update_tile_data(SelfList<TileMapQuadrant>::List &r_dirty_quadrant_list);
	
	TileSet::TerrainsPattern _get_best_terrain_pattern_for_constraints(int p_terrain_set, const Vector2i &p_position, const RBSet<TerrainConstraint> &p_constraints, TileSet::TerrainsPattern p_current_pattern);
	RBSet<TerrainConstraint> _get_terrain_constraints_from_added_pattern(const Vector2i &p_position, int p_terrain_set, TileSet::TerrainsPattern p_terrains_pattern) const;
	RBSet<TerrainConstraint> _get_terrain_constraints_from_painted_cells_list(const RBSet<Vector2i> &p_painted, int p_terrain_set, bool p_ignore_empty_terrains) const;
public:
	
	void set_tile_map(TileMap *p_tile_map);
	void set_layer_index_in_tile_map_node(int p_index);
	
	Rect2 get_rect(bool &r_changed) const;
	
	HashMap<Vector2i, TileSet::TerrainsPattern> terrain_fill_constraints(const Vector<Vector2i> &p_to_replace, int p_terrain_set, const RBSet<TerrainConstraint> &p_constraints); 
	HashMap<Vector2i, TileSet::TerrainsPattern> terrain_fill_connect(const Vector<Vector2i> &p_coords_array, int p_terrain_set, int p_terrain, bool p_ignore_empty_terrains = true); 
	HashMap<Vector2i, TileSet::TerrainsPattern> terrain_fill_path(const Vector<Vector2i> &p_coords_array, int p_terrain_set, int p_terrain, bool p_ignore_empty_terrains = true); 
	HashMap<Vector2i, TileSet::TerrainsPattern> terrain_fill_pattern(const Vector<Vector2i> &p_coords_array, int p_terrain_set, TileSet::TerrainsPattern p_terrains_pattern, bool p_ignore_empty_terrains = true); 
	
	TileMapCell get_cell(const Vector2i &p_coords, bool p_use_proxies = false) const;
	int get_effective_quadrant_size() const;