Repository: godot
Issue: Duplicated c# nodes with Node Array exports referencing children are not updated correctly
Labels: bug,topic:dotnet

### Tested versions

- This specific issue in 4.3.dev5 4.3.dev6 is limited to c# node arrays.
- A broader issue occurs on 4.1.3 and 4.2.2, that extends to regular node (non-array) exports (#82670) 
- On 4.0, the issue goes back to only affecting node array exports, but affects both gdscript and c#, and is once again limited to node array exports; node exports behave as expected


### System information

Godot v4.3.dev6.mono - Windows 10.0.22621 - GLES3 (Compatibility) - NVIDIA GeForce RTX 3090 (NVIDIA; 31.0.15.5186) - AMD Ryzen 9 5950X 16-Core Processor (32 Threads)

### Issue description

When duplicating or copy-pasting nodes with exported array paths in C#, with paths referring to children, the paths on the duplicates should point to their respective children, not the previous parent's child.  While this behaves as expected for most references, (e.g., node references, and anything in a GDScript node), for duplicated references in an *array*, these will refer to the same parent on the original node, which is inconsistent, and not desired. 

The behavior seems related to #82670, but when comparing to .dev5, most of my node references are fixed and reassign correctly, but there is something specific to the c# implementation of exported node arrays that remains affected.

The behavior does not vary if the node is backed by a tscn or a local subtree.

The behavior does not vary if using a native c# array vs a Godot.Collections.Array.

I've attached this video of myself reviewing valid references, then duplicating the nodes and deleting the originals, observing that *only* the C# node array references have not been updated correctly (and have been nulled out, due to the deletion):

https://github.com/godotengine/godot/assets/143504/fa799618-6c78-4ae5-8949-a561831eb38e

### Steps to reproduce

Consider the following:

CSEnemy.cs
```cs
using Godot;
using System;

public partial class CSEnemy : Node2D {
    [Export] CSGun gun;
    [Export] CSGun[] gunsArray;
}
```

CSGun.cs
```cs
using Godot;
using System;

public partial class CSGun : Node2D { }
```

1. Create an "CSEnemy"  Node2D with a "CSGun" Node2D child.
2. Assign the CSGun node to the `gun` field on the "CSEnemy" node, as well as its first element of the `gunsArray`
3. Duplicate the `CSEnemy` node.  The new node should be named `CSEnemy2`
4. Delete the `CSEnemy` node so that only `CSEnemy2` remains
5. Observe that while the CSGun2's `gun` reference remains valid, CSGun2's `gunsArray`'s item[0] is now unset.

NOTE: If you do the same thing but with GDScript, everything behaves as expected.

### Minimal reproduction project (MRP)

NOTE: because this is a C# project, the first time you open/import it (without the .godot folder) you must first *compile* the project, then exit and reopen the project in order for the serialized data to reload correctly.

I've included GDScript equivalents (with both node exports and node array exports), but they all behave as expected.

[test-duplicate.zip](https://github.com/godotengine/godot/files/15182070/test-duplicate.zip)