### Godot version

v4.1.stable.official [970459615]  < Steam

### System information

Godot v4.1.stable - Debian GNU/Linux trixie/sid trixie - Vulkan (Mobile) - dedicated NVIDIA GeForce GTX 1060 (nvidia) - Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz (6 Threads)

### Issue description

When a tween is performed on a `Transform2D`, where the starting value has a scale which isn't `(1, 1)`, both the position and scale of the intermediate values will be incorrect.  However, the correct transform will be applied at the end of the tween:

https://github.com/godotengine/godot/assets/441188/d190e224-3212-457a-9ba6-563b09abe930



### Steps to reproduce

Eg:
```
var tween := create_tween()
var start := Transform2D(Vector2.RIGHT, Vector2.DOWN, Vector2(100,100)) * 0.5
var end := Transform2D(Vector2.RIGHT, Vector2.DOWN, Vector2(200, 100))
(tween.tween_property($Tweened, "transform", end, 2.0)
	.from(start)
	)
```

### Minimal reproduction project

Single self-contained scene. Click to start the tween:

[tween_transform2d.zip](https://github.com/godotengine/godot/files/11995298/tween_transform2d.zip)

data_tracks[i].commit_temp_packets();
					total_page_size += data_tracks[i].data.size();
					total_page_size += time_tracks[i].packets.size() * 4;
					total_page_size += track_header_size;
					print_animc("\tTrack " + itos(i) + " time packets: " + itos(time_tracks[i].packets.size()) + " Packet data: " + itos(data_tracks[i].data.size()));
				}
				print_animc("\tTotal page Size: " + itos(total_page_size) + "/" + itos(p_page_size));
				
				Vector<uint8_t> page_data;
				page_data.resize(total_page_size);
				{
					uint8_t *page_ptr = page_data.ptrw();
					uint32_t base_offset = data_tracks.size() * track_header_size;
					for (uint32_t i = 0; i < data_tracks.size(); i++) {
						encode_uint32(base_offset, page_ptr + (track_header_size * i + 0));
						uint16_t *key_time_ptr = (uint16_t *)(page_ptr + base_offset);
						for (uint32_t j = 0; j < time_tracks[i].packets.size(); j++) {
							key_time_ptr[j * 2 + 0] = uint16_t(time_tracks[i].packets[j].frame);
							uint16_t ptr = time_tracks[i].packets[j].offset / 4;
							ptr |= (time_tracks[i].packets[j].count - 1) << 12;
							key_time_ptr[j * 2 + 1] = ptr;
							base_offset += 4;
						}
						encode_uint32(time_tracks[i].packets.size(), page_ptr + (track_header_size * i + 4));
						encode_uint32(base_offset, page_ptr + (track_header_size * i + 8));
						memcpy(page_ptr + base_offset, data_tracks[i].data.ptr(), data_tracks[i].data.size());
						base_offset += data_tracks[i].data.size();
						
						data_tracks[i].data.clear();
						data_tracks[i].temp_packets.clear();