Ok I got the job done. Thanks Larry and Alex for your advice.
I ended up removing most of the material with 127 "D-shaped" passes, each one 0.1mm further down than the previous. So in other words, only the bottom 0.1mm of the endmill's cutting edges were being used. After that, I was able to go back to my original plan of using the full 1/2" length of the endmill's cutting edges to clean up the sides of the keyway with a 0.1mm radial depth of cut and 400mm/min feed rate. I avoided the high chip loads by simply cutting into the keyway on one side, then moving in a straight line across to the other side without following the curved top part. After that, I found the key would fit the keyway high up, but not deep down. This suggests the sides were tapered due to tool deflection, so I ran about 5 spring passes and then the key fit nicely.
Alex, you expressed concern about the axial depth of cut being greater than 2x the tool diameter. As I understand it, that rule of thumb applies to slot milling where the radial depth of cut is the same as the bit diameter. In my case, the radial depth of cut is only 0.1mm, so I was able to use the full 12.7mm of the endmill's cutting edges. I'll be sure to check cutter runout in the future and yes, plunge milling sounds like a safe bet.
Larry, you suggested reducing the feed per tooth to 0.015mm and I think this is where chip thinning comes into play. If the radial depth of cut is equal to or greater than the bit radius, then the maximum chip thickness is the same as the feed per tooth. If on the other hand, the radial depth of cut is only a small fraction of the bit's radius, then the maximum chip thickness is reduced and you have to increase the feed rate to bring the thickness back up. I was actually quite surprised how much the feed rate had to be increased when using a shallow radial depth of cut. As a rule of thumb, I've tried to keep the maximum chip thickness in the 0.01 - 0.02mm range for small endmills. I think you made a good point about coolant, so one day I may look into getting some kind of MQL or mister.
Regarding cutting speed, my mill can only go up to 4443 rpm before it starts to time travel, so that's all I've got to work with. In my opinion, a stock Chinese Mini Mill isn't rigid enough for heavy cuts with big endmills and it's not fast enough for use with small endmills, so I tend to stick to cutters between 3 and 8mm. I suppose there are exceptions for fly cutters and stuff like that if you're taking really light cuts though. I have a feeling that maintaining a high cutting speed with carbide is more important for cutters that aren't very sharp like with cheap coarse-grain carbide turning inserts. Modern carbide endmills and router bits seem exceptionally sharp though, especially expensive ones, and I think you can get away with dropping the cutting speed if you have no other choice and you adjust feed rates to maintain an adequate chip thickness.
The following video encouraged me to incorporate some aspects of high speed machining when writing G-code:
And this video explains chip thinning better than I did:
Ian