Drift in Loiter/ Auto flight mode with synthetic NMEA GPS injection

I’m working on a project for navigating and ultimately running auto piloted missions with a pixhawk quadcopter, in areas where GPS is unavailable. I obtain my position by visually locating a series of markers, getting an XYZ position and converting into a set of NMEA GPS strings (RMC, GGA and VTG). The position is correct, injection into the pixhawk through the main GPS port is correct, sentences are correctly decoded and ardupilot detects the configuration we are sending correctly with good GPS fix data. If I analyze the logs the GPS position data is correctly decoded, latitude and longitude correspond to expected values in the real world, speed, course over ground etc. are all expected values.

Even so, the quadcopter is unable to maintain a steady loiter position (it drifts off straight away once we change flight modes).

I can’t see anything particularly wrong with the logs (link to example bin), calculated position seems to follow the GPS input pretty well, the EKF parameters (NKF3 ->IPx and IVx parameters below 0.5, NTUN -> DPosx/ Posx and DVelx/ Velx seem to be following each other).

Quadcopter had been tested previously to fly in loiter/ auto mode outdoors with standard UBX GPS correctly, waiting for bad weather to let up for a chance to re-test.

Any ideas would be welcome!