To draw a line under this one (at least, until something else makes me get out the worry beads)...

After doing a lot of checking, measuring everything I could, including duplicating measurements I had already done, I have concluded:

my X ballscrews (2005, C7) appear to have a pitch error of about 0.1mm in 100mm. This is somewhat greater than the nominal C7 accuracy of 50um in 300mm, and I would put it down to measuring error except that...

my Y ballscrew (1605, C7) appears to have a similar error but in the opposite direction. I would like to measure travel over a longer distance but I'm limited by the measuring tools I have available (Mitutoyo 200mm vernier caliper, in this case).

Both these errors could be compensated by tweaking "steps per" in Mach3 although I'm a little reluctant to do this without being able to check errors over a larger range.

All ballscrews seem to have about 50um backlash. I have not been able to find a spec for this for a C7 ballscrew, but it's a bit more than I would have hoped. However, for a machine intended for mainly woodworking, this is perfectly adequate, and even for making things like profiled aluminium plates isn't an issue. However, I might consider carefully doing things like machining a bearing housing and that might still have to be done on the milling machine with a boring head or suchlike.

Rechecking cutter diameters, I think that my original problem was that my single-flute cutters are cutting a tad undersize and I shall need to go through and carefully check and record actual cutting sizes so that I can include these in my CAM tool library. I note comments about tool tables, but on the whole I prefer to work with a "calibrated" tool library in CAM and not bother with tool tables in Mach3. I might change my preference in time (I have used tool tables with LinuxCNC in the past - I'm happy with the principle) but the net effect is the same. I have control of the whole CAD/CAM/CNC cycle and I'm not in a production environment where a machine operator will update tool tables locally due to wear/tool change or whatever without needing to re-CAM the part.

Thanks for all the comments, guys, but I have been suffering from my usual position that I don't quite trust anything that I have built while placing too much confidence in bought-in components!