### Godot version

4.1.1 stable 4.2. dev3

### System information

Win 10

### Issue description

[seek()](https://docs.godotengine.org/en/stable/classes/class_animationplayer.html?rtd_search=add_color_override#class-animationplayer-method-seek) is supposed to skip the keys inbetween current Timestamp and it's argument value Timestamp.

When playing an Animation in the AnimationPlayer which has a Call Method track key somewhere in the middle section for example, and then the user tries to "skip" that middle section using `seek()`, the Call Method track keys in the middle section are still handled, even though animation has skipped the middle section and the `update` argument is `false`.

So it basically behaves like [advance()](https://docs.godotengine.org/en/stable/classes/class_animationplayer.html?rtd_search=add_color_override#class-animationplayer-method-advance) should behave.
However, advance also does not behave as it should, since it advances further than it should and when setting Update in the seek() method to `true`, the Call Method track key is actually called twice!

### Steps to reproduce

Create an AnimationPlayer Animation of 5 seconds,
Add a script with two functions: One to seek(4.0) and another one to print("hi")
Add a Call Method Track and at Timestamp second 1.0 add a key to the seek() method and on Timestamp 2.5 add a key to print().
Play the scene and observe "hi" being printed
![image](https://github.com/godotengine/godot/assets/47016402/41f6dab0-9af6-46cd-95f1-e680a398e6af)

Set seek(4.0, true) to enable Update (like in advance method), and observe "hi" being printed twice!
Maybe related: https://github.com/godotengine/godot/issues/76773

### Minimal reproduction project

4.2. dev3 (issue is the same in 4.1.1 stable)
[animation_seek_bug.zip](https://github.com/godotengine/godot/files/12340066/animation_seek_bug.zip)
Node *child = parent->get_node_and_resource(a->track_get_path(i), resource, leftover_path);
		ERR_CONTINUE_MSG(!child, "On Animation: '" + p_anim->name + "', couldn't resolve track:  '" + String(a->track_get_path(i)) + "'."); 
		ObjectID id = resource.is_valid() ? resource->get_instance_id() : child->get_instance_id();
		int bone_idx = -1;
		int blend_shape_idx = -1;
#ifndef _3D_DISABLED
		if (a->track_get_path(i).get_subname_count() == 1 && Object::cast_to<Skeleton3D>(child)) {
			Skeleton3D *sk = Object::cast_to<Skeleton3D>(child);
			bone_idx = sk->find_bone(a->track_get_path(i).get_subname(0));
			if (bone_idx == -1) {
				continue;
			}
		}
		if (a->track_get_type(i) == Animation::TYPE_BLEND_SHAPE) {
			MeshInstance3D *mi_3d = Object::cast_to<MeshInstance3D>(child);
			if (!mi_3d) {
				continue;
			}
			if (a->track_get_path(i).get_subname_count() != 1) {
				continue;
			}
			blend_shape_idx = mi_3d->find_blend_shape_by_name(a->track_get_path(i).get_subname(0));
			if (blend_shape_idx == -1) {
				continue;
			}
		}
#endif 
		if (!child->is_connected("tree_exiting", callable_mp(this, &AnimationPlayer::_node_removed))) {
			child->connect("tree_exiting", callable_mp(this, &AnimationPlayer::_node_removed).bind(child), CONNECT_ONE_SHOT);
		}