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

return p_a.spherical_cubic_interpolate_in_time(p_b, p_pre_a, p_post_b, p_c, p_b_t, p_pre_a_t, p_post_b_t);
}
Variant Animation::_cubic_interpolate_in_time(const Variant &p_pre_a, const Variant &p_a, const Variant &p_b, const Variant &p_post_b, real_t p_c, real_t p_pre_a_t, real_t p_b_t, real_t p_post_b_t) const {
	Variant::Type type_a = p_a.get_type();
	Variant::Type type_b = p_b.get_type();
	Variant::Type type_pa = p_pre_a.get_type();
	Variant::Type type_pb = p_post_b.get_type();
	
	uint32_t vformat = 1 << type_a;
	vformat |= 1 << type_b;
	vformat |= 1 << type_pa;
	vformat |= 1 << type_pb;
	if (vformat == ((1 << Variant::INT) | (1 << Variant::FLOAT)) || vformat == (1 << Variant::FLOAT)) {
		
		real_t a = p_a;
		real_t b = p_b;
		real_t pa = p_pre_a;
		real_t pb = p_post_b;
		return Math::cubic_interpolate_in_time(a, b, pa, pb, p_c, p_b_t, p_pre_a_t, p_post_b_t);
	} else if ((vformat & (vformat - 1))) {
		return p_a; 
	}
	switch (type_a) {
		case Variant::VECTOR2: {
			Vector2 a = p_a;
			Vector2 b = p_b;
			Vector2 pa = p_pre_a;
			Vector2 pb = p_post_b;
			return a.cubic_interpolate_in_time(b, pa, pb, p_c, p_b_t, p_pre_a_t, p_post_b_t);
		}