### 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)
} else {
						pa->value_accum = Animation::interpolate_variant(pa->value_accum, value, p_interp);
					}
				} else {
					List<int> indices;
					if (p_seeked) {
						int found_key = a->track_find_key(i, p_time);
						if (found_key >= 0) {
							indices.push_back(found_key);
						}
					} else {
						if (p_started) {
							int first_key = a->track_find_key(i, p_prev_time, Animation::FIND_MODE_EXACT);
							if (first_key >= 0) {
								indices.push_back(first_key);
							}
						}
						a->track_get_key_indices_in_range(i, p_time, p_delta, &indices, p_looped_flag);
					}
					for (int &F : indices) {
						Variant value = a->track_get_key_value(i, F);
						value = post_process_key_value(a, i, value, nc->node);
						switch (pa->special) {
							case SP_NONE: {
								bool valid;
								pa->object->set_indexed(pa->subpath, value, &valid); 
#ifdef DEBUG_ENABLED
								if (!valid) {
									ERR_PRINT("Failed setting track value '" + String(pa->owner->path) + "'. Check if the property exists or the type of key is valid. Animation '" + a->get_name() + "' at node '" + get_path() + "'.");
								}