### Godot version

v4.1.1.stable.official [bd6af8e0e]

### System information

Godot v4.1.1.stable - Windows 10.0.19045 - Vulkan (Forward+) - dedicated NVIDIA GeForce GTX 1060 6GB (NVIDIA; 31.0.15.3179) - Intel(R) Core(TM) i5-8500 CPU @ 3.00GHz (6 Threads)

### Issue description

When connecting the `animation_started` signal from an animation tree, the connected method is always called twice.
This only occurs with the `animation_started` signal, the `animation_finished` signal is only emitted once.

This unfortunately makes relying on the signal impossible.

### Steps to reproduce

(See minimal production project)
- Use `animation_started.connect()`
- Print something out in the connected method (the example project prints the `anim_name` parameter)
- method is called twice -> two prints in the console

### Minimal reproduction project

[anim_tree_signal_bug.zip](https://github.com/godotengine/godot/files/12229864/anim_tree_signal_bug.zip)

The animation tree travels to the 'move' animation when `ui_accept` is pressed (see `anim_tree.gd`) and has print statements inside the methods connected to both the `animation_started` and `animation_finished` signal.

} else if (anim->get_loop_mode() == Animation::LOOP_LINEAR) {
		if (!Math::is_zero_approx(anim_size)) {
			if (prev_time >= 0 && cur_time < 0) {
				looped_flag = node_backward ? Animation::LOOPED_FLAG_END : Animation::LOOPED_FLAG_START;
			}
			if (prev_time <= anim_size && cur_time > anim_size) {
				looped_flag = node_backward ? Animation::LOOPED_FLAG_START : Animation::LOOPED_FLAG_END;
			}
			cur_time = Math::fposmod(cur_time, anim_size);
		}
		backward = false;
		is_looping = true;
	} else {
		if (cur_time < 0) {
			step += cur_time;
			cur_time = 0;
		} else if (cur_time > anim_size) {
			step += anim_size - cur_time;
			cur_time = anim_size;
		}
		backward = false;
		
		if (p_time > 0) {
			if (play_mode == PLAY_MODE_FORWARD) {
				if (prev_time >= anim_size) {
					step = 0;
				}
			} else {
				if (prev_time <= 0) {
					step = 0;