### 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)

bool _property_can_revert(const StringName &p_name) const;
	bool _property_get_revert(const StringName &p_name, Variant &r_property) const;
	void _notification(int p_what);
	static void _bind_methods();
#ifndef DISABLE_DEPRECATED
	Rect2i _get_used_rect_bind_compat_78328();
	void _set_quadrant_size_compat_81070(int p_quadrant_size);
	int _get_quadrant_size_compat_81070() const;
	static void _bind_compatibility_methods();
#endif
public:
	static Vector2i transform_coords_layout(const Vector2i &p_coords, TileSet::TileOffsetAxis p_offset_axis, TileSet::TileLayout p_from_layout, TileSet::TileLayout p_to_layout);
#ifdef TOOLS_ENABLED
	virtual Rect2 _edit_get_rect() const override;
#endif
#ifndef DISABLE_DEPRECATED
	void force_update(int p_layer);
#endif
	
	void queue_internal_update();
	void _internal_update();
	void set_tileset(const Ref<TileSet> &p_tileset);
	Ref<TileSet> get_tileset() const;
	void set_rendering_quadrant_size(int p_size);
	int get_rendering_quadrant_size() const;
	static void draw_tile(RID p_canvas_item, const Vector2 &p_position, const Ref<TileSet> p_tile_set, int p_atlas_source_id, const Vector2i &p_atlas_coords, int p_alternative_tile, int p_frame = -1, Color p_modulation = Color(1.0, 1.0, 1.0, 1.0), const TileData *p_tile_data_override = nullptr, real_t p_animation_offset = 0.0);
	
	int get_layers_count() const;
	void add_layer(int p_to_pos);
	void move_layer(int p_layer, int p_to_pos);