I was not very impressed with the sloppyness, so I decided to redesign the Z-axis to reduce lateral play in the bit. I also thought it would be great if I could drill holes at the same time. I spent another $2 and got some new threded rod and a 0.8mm bit designed for a hand held router(dremel type thing).
The bit now travels through a snug, but not tight, hole in two layers of 5mm HDPE. Yes, that would be the cutting board again. This takes the side loading off of the motor and holds the bit much more steadily.
The new bit is much longer and needs more travel for drilling, so I lengthened the z-axis with some new threaded rod. Other than the new bit, new plate with hole for the bit, and new threaded rod, the hardware is pretty much the same.
The software needed some upgrades to handle drilling. Since there is no single point object in the SVG language, I just made tiny line segments with length below some threshold value. The code interprets these tiny segments as drilling locations and sends a drill command to the arduino. The updated code is here:
SVGMill.ino - the arduino code
SVGReader2.pde - the processing code
And here is the result. I made the pcb a bit more traditional in style this time. The result is still far from perfect, and there is one trace that is just barely surviving and probably needs a good solder coat, but it is far more precise than the last version. Oh, and it has holes automatically drilled. That's a huge improvement. First is the ideal image, then the actual result.