...so that I don't forget:
One of the Z-axis screws was bent, and was causing the X/Y axes to wobble, so straightened in by hand (in place).
Used digital caliper to measure travel over ~80mm in all axes (ensuring to drive the motors in the same direction to avoid backlash effects)
Resulting G-code (put in "machine settings" in Cura):
M92 X464.97 Y100.30 Z18539.00 E1040.00
Push the motor speeds slightly (50% faster):
M203 X30.00 Y30.00 Z2.0 E22.50
...can now do 30mm/sec in Cura (e.g. for travels). Haven't tried printing that fast yet...
Discovered X-axis backlash is about 0.32mm (likely due to use of geared stepper 24BYJ48). Apart from dimensional errors, this was also causing infill not to touch inner walls, leaving a gap and making the structure weaker. On very thin sections the infill wasn't even a zig-zag since the X axis didn't really move!
Compensation within Cura seems to be impossible, but found this which seems to work well. You just have to remember to run your G-code file through it before printing. Also need to add "G90" after the G28 command in the startup code ("machine settings" dialog).
Also measured Y-axis lash at about 0.1mm.
Even with carefully levelling the bed, and the default setting in Cura of 0.3mm for the initial layer, I found that layer #1 is too squished. So I installed the Z-offset Plugin and set it to 0.1mm. (I guess I could have used G92 Z0.1 in the machine settings).
So far, so good! Much better than straight-out-of-the-box.