### Godot version

v4.0.beta10.mono.official [d0398f62f]

### System information

Windows 11

### Issue description

I am experiencing a runtime crash in my game which logs the following error:

```
ERROR: FATAL: Condition "!match" is true.
   at: ~CSharpInstance (modules/mono/csharp_script.cpp:2015)
Fatal error. System.Runtime.InteropServices.SEHException (0x80004005): External component has thrown an exception.
   at Godot.NativeInterop.NativeFuncs.godotsharp_internal_refcounted_disposed(IntPtr, IntPtr, Godot.NativeInterop.godot)
   at Godot.Object.Dispose(Boolean)
   at Godot.Object.Finalize()
```
There is no other output alongside this error.

I am using several `RefCounted` objects throughout my game and the error seems to be related. I'm using `RefCounted` 
 primarily as a way to pass my own C# objects as signal arguments.

~~My project is fairly complex so I'm having a hard time isolating the issue. The crash doesn't happen immediately, but rather it usually happens after a minute or so of playing the game. It also seems quite inconsistent - sometimes I can play for several minutes before the crash. There's probably a very specific combination of events I need to identify in order to reproduce the issue consistently.~~

~~I know this report isn't super helpful but I've been trying to isolate the issue for the past several hours with no luck. I figured I'd log it for now and update with an MRP if/when I find out how to reproduce.~~

I've now uploaded an MRP below. I still haven't been able to identify the exact cause but I am hoping the MRP is stripped down enough to make debugging easier.

I have confirmed the crash happens in betas 8 and 9 as well.

### Steps to reproduce

Unknown

### Minimal reproduction project

[Crash MRP.zip](https://github.com/godotengine/godot/files/10304593/Crash.MRP.zip)

Run the MRP for ~30 seconds and observe the crash. Also, you can remove `WanderTravelDefinition` from the `EnemyFlyingOrbBullet` to observe that the crash no longer happens.

String hint_string = *reinterpret_cast<const String *>(&prop.hint_string);
		PropertyInfo pinfo(prop.type, name, prop.hint, hint_string, prop.usage);
		p_script->member_info[name] = pinfo;
		if (prop.exported) {
#ifdef TOOLS_ENABLED
			p_script->exported_members_cache.push_back(pinfo);
#endif
#if defined(TOOLS_ENABLED) || defined(DEBUG_ENABLED)
			p_script->exported_members_names.insert(name);
#endif
		}
	}
}
#ifdef TOOLS_ENABLED
void GD_CLR_STDCALL CSharpScript::_add_property_default_values_callback(CSharpScript *p_script, void *p_def_vals, int32_t p_count) {
	GDMonoCache::godotsharp_property_def_val_pair *def_vals = (GDMonoCache::godotsharp_property_def_val_pair *)p_def_vals;
	for (int i = 0; i < p_count; i++) {
		const GDMonoCache::godotsharp_property_def_val_pair &def_val_pair = def_vals[i];
		StringName name = *reinterpret_cast<const StringName *>(&def_val_pair.name);
		Variant value = *reinterpret_cast<const Variant *>(&def_val_pair.value);
		p_script->exported_members_defval_cache[name] = value;
	}
}
#endif
bool CSharpScript::_update_exports(PlaceHolderScriptInstance *p_instance_to_update) {
#ifdef TOOLS_ENABLED
	bool is_editor = Engine::get_singleton()->is_editor_hint();
	if (is_editor) {
		placeholder_fallback_enabled = true; // until proven otherwise
	}