### 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)
ERR_FAIL_COND_V(!can_apply_reset(), Ref<AnimatedValuesBackup>());
	Ref<Animation> reset_anim = animation_set[SceneStringNames::get_singleton()->RESET].animation;
	ERR_FAIL_COND_V(reset_anim.is_null(), Ref<AnimatedValuesBackup>());
	Node *root_node = get_node_or_null(root);
	ERR_FAIL_NULL_V(root_node, Ref<AnimatedValuesBackup>());
	AnimationPlayer *aux_player = memnew(AnimationPlayer);
	EditorNode::get_singleton()->add_child(aux_player);
	Ref<AnimationLibrary> al;
	al.instantiate();
	al->add_animation(SceneStringNames::get_singleton()->RESET, reset_anim);
	aux_player->add_animation_library("", al);
	aux_player->set_assigned_animation(SceneStringNames::get_singleton()->RESET);
	
	Ref<AnimatedValuesBackup> old_values = aux_player->backup_animated_values(get_node(get_root()));
	aux_player->seek(0.0f, true);
	aux_player->queue_free();
	if (p_user_initiated) {
		Ref<AnimatedValuesBackup> new_values = aux_player->backup_animated_values();
		old_values->restore();
		EditorUndoRedoManager *ur = EditorUndoRedoManager::get_singleton();
		ur->create_action(TTR("Animation Apply Reset"));
		ur->add_do_method(new_values.ptr(), "restore");
		ur->add_undo_method(old_values.ptr(), "restore");
		ur->commit_action();
	}
	return old_values;
}
bool AnimationPlayer::can_apply_reset() const {