### Godot version

4.2-stable_mono

### System information

Windows 10, NVidiaRTX 2070

### Issue description

After updating to 4.2 I've realized that all my tweens working with the property "modulate" or "self_modulate" were behaving strangely... it happens when you use loops..  for instance if you have:

```
tween.SetLoop();
tween.TweenProperty(godotObject, "modulate", Colors.Red, 0.5f)
tween.TweenProperty(godotObject, "modulate", Colors.Blue, 0.5f);
```

that object should change its color from red to blue and then from blue to red and then loop, right? (basically, because its final value should be blue)

well, after 4.2 .. the color resets to its default color before starting a new loop, this didn't happen on older versions.
If you don't use Loops its final value persists, so the problem is only when using Loops.

so, for example if you had a modulate value of White before starting the loop.. the tween will change its modulate from red to blue, then resets to white and then start over again... 

* I haven't tested on GDScript

### Steps to reproduce

1- Create a CanvasItem such as a white ColorRect, so that you can tween its modulate property.
2- Attach a script that runs the following code (C#):

```
  tweener = this.CreateTween();
  tweener.SetLoops(0);
  tweener.SetEase(Tween.EaseType.Out);
  tweener.TweenProperty(godotObject, "modulate", Colors.Red, 0.5f);
  tweener.TweenProperty(godotObject, "modulate", Colors.Blue, 0.5f);
```

The modulate will change its value to default each time before starting a new loop

### Minimal reproduction project

N/A
bool started = false;
	bool running = true;
	bool dead = false;
	bool valid = false;
	bool default_parallel = false;
	bool parallel_enabled = false;
#ifdef DEBUG_ENABLED
	bool is_infinite = false;
#endif
	typedef real_t (*interpolater)(real_t t, real_t b, real_t c, real_t d);
	static interpolater interpolaters[TRANS_MAX][EASE_MAX];
	void _start_tweeners();
	void _stop_internal(bool p_reset);
	bool _validate_type_match(const Variant &p_from, Variant &r_to);
protected:
	static void _bind_methods();
public:
	virtual String to_string() override;
	Ref<PropertyTweener> tween_property(const Object *p_target, const NodePath &p_property, Variant p_to, double p_duration);
	Ref<IntervalTweener> tween_interval(double p_time);
	Ref<CallbackTweener> tween_callback(const Callable &p_callback);
	Ref<MethodTweener> tween_method(const Callable &p_callback, const Variant p_from, Variant p_to, double p_duration);
	void append(Ref<Tweener> p_tweener);
	bool custom_step(double p_delta);
	void stop();
	void pause();
	void play();
	void kill();
	bool is_running();
	bool is_valid();