Thanks for all the ideas. I've got a lot more testing to do now.
When I manually level the bed to the nozzle and then run G29, I get the mesh below, I think the entire toolhead is deflecting as it travels across the X axis. I'll need to do a bit of a redesign to stiffen it more. I also want to add 2 fixed probe points attached directly to the Z gantry, insteaf of using the bed for auto leveling. That should give a more reliable starting point.
The homing and bed probing files seem to be working correctly, so I don't think thats the issue. Although I've cleaned them up a bit and all 3 are included below.
mesh.png
bed.g
M561 ; clear stored mesh G28 ; home all ; rough bed leveling pass M558 H10 F1500 ; dive height, speed G30 P0 X50 Y150 Z-99999 ; probe points G30 P1 X150 Y150 Z-99999 G30 P2 X250 Y150 Z-99999 S2 ; and run probe ; fine bed leveling pass M558 H3 F300 ; dive height, speed G30 P0 X100 Y100 Z-99999 ; probe points G30 P1 X200 Y100 Z-99999 G30 P2 X100 Y200 Z-99999 G30 P3 X200 Y200 Z-99999 S2 ; and run probe ; mesh bed leveling M557 X20:280 Y20:280 P3 ; probe grid G29 ; run probehomeall.g
; Home X/Y G91 ; relative positioning G1 H2 Z5 F1000 ; drop bed G1 H1 X320 Y-320 F10000 ; move to X or Y endstop (fast) G1 H1 X320 F10000 ; move to X endstop (fast) G1 H1 Y-320 F10000 ; move to Y endstop (fast) G1 X-5 Y5 F10000 ; go back a few mm G1 H1 X320 F1000 ; move to X endstop (slow) G1 H1 Y-320 F1000 ; move to Y endstop (slow) G90 ; absolute positioning ; Home z M98 P"homez.g"homez.g
G91 ; relative positioning G1 H2 Z5 F6000 ; drop bed G90 ; absolute positioning G1 X150 Y150 F30000 ; move to probe point M558 H10 F2500 ; fast home G30 ; home Z M558 H3 F300 ; slow home G30 ; home Z