### Godot version

4.0.beta10.official

### System information

Pop!_OS 22.04

### Issue description

After assigning a bone to a polygon, if the bone is not at the initial position (0,0), a strange behavior occurs when moving or rotating the bones.

The polygon is translated to incorrect positions (it seems to be based on the center of the original texture and not the polygon itself.

![godot4-09-01-2023 13-32](https://user-images.githubusercontent.com/1427790/211311363-9d33ce77-b1cd-4d0e-b607-3fce9fe35b86.gif)

Trying the exactly same nodes on v3.5.1 behaves correctly.

![godot3-09-01-2023 13-22](https://user-images.githubusercontent.com/1427790/211311637-c7c33a93-3918-4037-b545-6284b046bc97.gif)

There are a similar closed issue for Godot 3:
https://github.com/godotengine/godot/issues/48348


### Steps to reproduce

1. Add a Polygon2D node to the root
2. Assign a texture to the Polygon2D and edit the polygon UV to cut the desired part
3. Move it to a new position
4. Add a Skeleton2D node to the root
5. Add a Bone2D node to the Skeleton2D
6. Assign the Bone2D to the Polygon2D and proper weight to de polygon UV
7. Rotate or move the Bone2D

### Minimal reproduction project

[godot4_bones2d_issue.zip](https://github.com/godotengine/godot/files/10373343/godot4_bones2d_issue.zip)

SelfList<MeshInstance>::List dirty_mesh_instance_arrays;
	
	struct MultiMesh {
		RID mesh;
		int instances = 0;
		RS::MultimeshTransformFormat xform_format = RS::MULTIMESH_TRANSFORM_3D;
		bool uses_colors = false;
		bool uses_custom_data = false;
		int visible_instances = -1;
		AABB aabb;
		bool aabb_dirty = false;
		bool buffer_set = false;
		bool motion_vectors_enabled = false;
		uint32_t motion_vectors_current_offset = 0;
		uint32_t motion_vectors_previous_offset = 0;
		uint64_t motion_vectors_last_change = -1;
		uint32_t stride_cache = 0;
		uint32_t color_offset_cache = 0;
		uint32_t custom_data_offset_cache = 0;
		Vector<float> data_cache; 
		bool *data_cache_dirty_regions = nullptr;
		uint32_t data_cache_dirty_region_count = 0;
		bool *previous_data_cache_dirty_regions = nullptr;
		uint32_t previous_data_cache_dirty_region_count = 0;
		RID buffer; 
		RID uniform_set_3d;
		RID uniform_set_2d;
		bool dirty = false;
		MultiMesh *dirty_list = nullptr;
		Dependency dependency;