### Tested versions

Reproducible in 4.2-stable 

### System information

Godot v4.2.stable (46dc27791) - Windows 10.0.22621 - Vulkan (Forward+) - dedicated NVIDIA GeForce GTX 1660 Ti (NVIDIA; 31.0.15.1640) - AMD Ryzen 7 4800H with Radeon Graphics (16 Threads)

### Issue description

If you have a tile_set with an occlusion layer, and you remove a tile with an occlusion shape at runtime, the occlusion shape will remain.

![image](https://github.com/godotengine/godot/assets/6132794/c9eed82b-94c4-4654-b33a-1a9c5be4d45c)

![image](https://github.com/godotengine/godot/assets/6132794/c43cc34b-d307-416e-8e3f-bf49d1421ae7)



### Steps to reproduce

- Setup a scene with CanvasModulate and a 2D Light
- Create a tilemap & tileset
- Add an occlusion layer
- Give one or more tiles an occlusion shape
- Make a script run sometime during process to randomly remove and add the tiles with occlusion shapes, and tiles without.
You should now see errant shadows.

Or, in the MRP, just play the scene and you should see the problem once tiles alternate.

### Minimal reproduction project (MRP)

[OccluderProblem.zip](https://github.com/godotengine/godot/files/13552364/OccluderProblem.zip)

void remove_layer(int p_layer);
	void set_layer_name(int p_layer, String p_name);
	String get_layer_name(int p_layer) const;
	void set_layer_enabled(int p_layer, bool p_visible);
	bool is_layer_enabled(int p_layer) const;
	void set_layer_modulate(int p_layer, Color p_modulate);
	Color get_layer_modulate(int p_layer) const;
	void set_layer_y_sort_enabled(int p_layer, bool p_enabled);
	bool is_layer_y_sort_enabled(int p_layer) const;
	void set_layer_y_sort_origin(int p_layer, int p_y_sort_origin);
	int get_layer_y_sort_origin(int p_layer) const;
	void set_layer_z_index(int p_layer, int p_z_index);
	int get_layer_z_index(int p_layer) const;
	void set_layer_navigation_enabled(int p_layer, bool p_enabled);
	bool is_layer_navigation_enabled(int p_layer) const;
	void set_layer_navigation_map(int p_layer, RID p_map);
	RID get_layer_navigation_map(int p_layer) const;
	void set_selected_layer(int p_layer_id); 
	int get_selected_layer() const;
	void set_collision_animatable(bool p_enabled);
	bool is_collision_animatable() const;
	
	void set_collision_visibility_mode(VisibilityMode p_show_collision);
	VisibilityMode get_collision_visibility_mode();
	void set_navigation_visibility_mode(VisibilityMode p_show_navigation);
	VisibilityMode get_navigation_visibility_mode();
	
	void set_cell(int p_layer, const Vector2i &p_coords, int p_source_id = TileSet::INVALID_SOURCE, const Vector2i p_atlas_coords = TileSetSource::INVALID_ATLAS_COORDS, int p_alternative_tile = 0);
	void erase_cell(int p_layer, const Vector2i &p_coords);
	int get_cell_source_id(int p_layer, const Vector2i &p_coords, bool p_use_proxies = false) const;