### Godot version

543750a1b3f5696f9ba8e91cb49dc7db05d2ae62 

### Issue description

Looking into the cause of the `Children name does not match parent name in hashtable, this is a bug.` from #77845 and making notes in this issue before I forget what I wanted to report (again).

https://github.com/godotengine/godot/blob/543750a1b3f5696f9ba8e91cb49dc7db05d2ae62/scene/main/node.cpp#L1432-L1440

During `NOTIFICATION_CHILD_ORDER_CHANGED` the child node had been removed from the parents list of children, the child still has the parent set, making it possible to attempt to remove it from its parent again triggering the error.

### Steps to reproduce

Add this script to any node and run

```gdscript
extends Node

var node : Node

func _ready():
	var n = Node.new()
	add_child(n)
	node = n
	remove_child(n)

func _notification(what):
	if what == NOTIFICATION_CHILD_ORDER_CHANGED && node && node.get_parent() == self:
		remove_child(node)
```

### Minimal reproduction project

[Test_77870.zip](https://github.com/godotengine/godot/files/11651877/Test_77870.zip)

ERR_FAIL_COND(!is_inside_tree());
	SceneTree::ProcessGroup *pg = (SceneTree::ProcessGroup *)data.process_group;
	pg->call_queue.push_notification(this, p_notification);
}
void Node::call_thread_safep(const StringName &p_method, const Variant **p_args, int p_argcount, bool p_show_error) {
	if (is_accessible_from_caller_thread()) {
		Callable::CallError ce;
		callp(p_method, p_args, p_argcount, ce);
		if (p_show_error && ce.error != Callable::CallError::CALL_OK) {
			ERR_FAIL_MSG("Error calling method from 'call_threadp': " + Variant::get_call_error_text(this, p_method, p_args, p_argcount, ce) + ".");
		}
	} else {
		call_deferred_thread_groupp(p_method, p_args, p_argcount, p_show_error);
	}
}
void Node::set_thread_safe(const StringName &p_property, const Variant &p_value) {
	if (is_accessible_from_caller_thread()) {
		set(p_property, p_value);
	} else {
		set_deferred_thread_group(p_property, p_value);
	}
}
void Node::notify_thread_safe(int p_notification) {
	if (is_accessible_from_caller_thread()) {
		notification(p_notification);
	} else {
		notify_deferred_thread_group(p_notification);
	}
}
void Node::_bind_methods() {