Arrays populated by external DLL if stepped over, not when running
===

I am using `kernel32.dll` to import a 3rd party DLL's functions via the method below.

    private delegate bool MyDelegate(float[] floatArray, UInt16[] intArray);
    
    private static MyDelegate MyDelegateCaller = null;
    
    public static bool MyMethod(ref float[] floatArray, out UInt16[] intArray)
    {
        if(MyDelegateCaller == null)
        {
            IntPtr address = GetProcAddress(_dllHandle, "ExternalMethod");

            MyDelegateCaller = 
                (MyDelegate)Marshal.GetDelegateForFunctionPointer(
                    address, 
                    typeof(MyDelegate)
                );
        }

        return MyDelegateCaller(floatArray, intArray); //*
    }

If I debug and step over `MyDelegateCaller` (at `//*`) then the arrays get populated as expected. However, if I just run the code, the arrays do not get populated.

Any ideas as to what is going on?

Some more info: 
I am using this method rather than PInvoke for calling the DLL as I need to be able to unload and reload DLLs at run-time.
I have tried adding delays, running in different threads.