### Godot version

v4.0.3.stable.mono.official [5222a99f5]

### System information

macOS Monterey 12.6.6 (21G646)

### Issue description

When creating a tileset by code with custom data layers, removing a layer with `remove_custom_data_layer` does not update the name-to-layer mapping; `get_custom_data_layer_by_name` will continue to return that layer's original index.

This has a downstream effect of causing TileData objects attempting to use `get_custom_data('Layer B')` to return invalid data (whatever custom data is now in Layer B's old index; e.g. Layer C).

I would expect that after using `remove_custom_data_layer`, I would be able to still use `get_custom_data_layer_by_name` on that tileset.

### Steps to reproduce

Run this code to see that getting Layer B by name after removing the first layer continues to return its original index (1) when in reality it is now at index 0.
```
	var tileset:TileSet = TileSet.new()

	tileset.add_custom_data_layer()
	tileset.set_custom_data_layer_name(0, 'Layer A')
	tileset.set_custom_data_layer_type(0, TYPE_INT)

	tileset.add_custom_data_layer()
	tileset.set_custom_data_layer_name(1, 'Layer B')
	tileset.set_custom_data_layer_type(1, TYPE_STRING)

	print('Layer index 0 name : ', tileset.get_custom_data_layer_name(0)) # Layer A
	print('Layer index 1 name : ', tileset.get_custom_data_layer_name(1)) # Layer B
	print('Layer B is on index : ', tileset.get_custom_data_layer_by_name("Layer B")) # 1

	print('----- removing custom data layer 0 -----')
	tileset.remove_custom_data_layer(0)

	print('Layer index 0 name : ', tileset.get_custom_data_layer_name(0)) # Layer B
	print('Layer index 1 name : ', tileset.get_custom_data_layer_name(1)) # prints an error, as expected
	print('Layer B is on index : ', tileset.get_custom_data_layer_by_name("Layer B")) # returns 1 still! should return 0.
```

### Minimal reproduction project

[RemoveCustomDataLayer.zip](https://github.com/godotengine/godot/files/11804762/RemoveCustomDataLayer.zip)

max_size = kv.key;
			max_count = kv.value;
		}
	}
	set_tile_size(max_size);
	
	for (const KeyValue<int, CompatibilityTileData *> &E : compatibility_data) {
		memdelete(E.value);
	}
	compatibility_data = HashMap<int, CompatibilityTileData *>();
}
Array TileSet::compatibility_tilemap_map(int p_tile_id, Vector2i p_coords, bool p_flip_h, bool p_flip_v, bool p_transpose) {
	Array cannot_convert_array;
	cannot_convert_array.push_back(TileSet::INVALID_SOURCE);
	cannot_convert_array.push_back(TileSetAtlasSource::INVALID_ATLAS_COORDS);
	cannot_convert_array.push_back(TileSetAtlasSource::INVALID_TILE_ALTERNATIVE);
	if (!compatibility_tilemap_mapping.has(p_tile_id)) {
		return cannot_convert_array;
	}
	int tile_mode = compatibility_tilemap_mapping_tile_modes[p_tile_id];
	switch (tile_mode) {
		case COMPATIBILITY_TILE_MODE_SINGLE_TILE: {
			Array a;
			a.push_back(p_flip_h);
			a.push_back(p_flip_v);
			a.push_back(p_transpose);
			return compatibility_tilemap_mapping[p_tile_id][a];
		}
		case COMPATIBILITY_TILE_MODE_AUTO_TILE:
			return cannot_convert_array;