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

virtual RID multimesh_allocate() override;
	virtual void multimesh_initialize(RID p_multimesh) override;
	virtual void multimesh_free(RID p_rid) override;
	virtual void multimesh_allocate_data(RID p_multimesh, int p_instances, RS::MultimeshTransformFormat p_transform_format, bool p_use_colors = false, bool p_use_custom_data = false) override;
	virtual int multimesh_get_instance_count(RID p_multimesh) const override;
	virtual void multimesh_set_mesh(RID p_multimesh, RID p_mesh) override;
	virtual void multimesh_instance_set_transform(RID p_multimesh, int p_index, const Transform3D &p_transform) override;
	virtual void multimesh_instance_set_transform_2d(RID p_multimesh, int p_index, const Transform2D &p_transform) override;
	virtual void multimesh_instance_set_color(RID p_multimesh, int p_index, const Color &p_color) override;
	virtual void multimesh_instance_set_custom_data(RID p_multimesh, int p_index, const Color &p_color) override;
	virtual RID multimesh_get_mesh(RID p_multimesh) const override;
	virtual Transform3D multimesh_instance_get_transform(RID p_multimesh, int p_index) const override;
	virtual Transform2D multimesh_instance_get_transform_2d(RID p_multimesh, int p_index) const override;
	virtual Color multimesh_instance_get_color(RID p_multimesh, int p_index) const override;
	virtual Color multimesh_instance_get_custom_data(RID p_multimesh, int p_index) const override;
	virtual void multimesh_set_buffer(RID p_multimesh, const Vector<float> &p_buffer) override;
	virtual Vector<float> multimesh_get_buffer(RID p_multimesh) const override;
	virtual void multimesh_set_visible_instances(RID p_multimesh, int p_visible) override;
	virtual int multimesh_get_visible_instances(RID p_multimesh) const override;
	virtual AABB multimesh_get_aabb(RID p_multimesh) const override;
	void _update_dirty_multimeshes();
	bool _multimesh_enable_motion_vectors(RID p_multimesh);
	void _multimesh_get_motion_vectors_offsets(RID p_multimesh, uint32_t &r_current_offset, uint32_t &r_prev_offset);
	_FORCE_INLINE_ RS::MultimeshTransformFormat multimesh_get_transform_format(RID p_multimesh) const {