The code was originally written using a byte array. I changed it to use the string as that is the example given on arduino.cc. I'm not sure that one method is actually that much faster than the other though. It seems intuitive that a byte array would be faster but then you have to keep track of the pointers and check for overflow...
In this case it does not matter what avrisp() does. Since it is only called when an EOP is receiveed, it never gets called for the long request. It does get called for all of the short requests, there are several of these and they are all run and responded to. I have a port monitor report showing all of this working. Then AVRDude sends the 133 byte string, and only part of it gets thru, the rest is lost. Since the EOP is the last character, it is never seen, and the request times out. At this point the only thing running is the Serial Event loop.
With Arduino IDE 22 I can read all 133 characters without a hitch. With 1.0 it's getting truncated. I am very surprised by this, I would have expected to be able to easily keep up with the data at 19200 bps. The size of internal buffer should not be an issue but it appears that it is.
I know I can edit something in the IDE so that the buffer is larger, and I will try this to see if it helps, but I really don't want a solution that involves modifications to the Arduino IDE that will get wiped out by an upgrade.
Thanks for all the suggestions, it's all helpful and I appreciate your taking the time.
William