It seems that I've found a workaround - not a complete solution.
I'm streaming diagnostics data off the Arduino Mega2560 board back to PuTTY the PC (serial monitor won't obey escape sequences). I'm doing rapid application development here, which means writing a small functional unit of code, compiling and testing, writing another piece of code, compiling and testing again, and so on.
If, after checking the data from the board, I kill PuTTY then pull the USB cable out until the "ba dump" sound is heard, and then plug it back in, when I come to subsequently compile and upload all is well. If I don't pull the USB cable out and plug it back in again, I get a "COM5 already in use" error. It seems that the board is keeping a handle on the port by sending data to it. Resetting the USB port seems to release the board's grip and makes COM5 available again for uploading. This workaround was still working yesterday evening after what must have been several dozen uploads.
The question is, however, why did this suddenly start happening after several weeks of perfect operation, during which I've been streaming data off the board? We have several more boards on order. Will this be a recurrent problem, or does it only happen with some hardware?