Booting Arduino with rx active causes hang

It sounds like the GPS serial stream is confuising the Arduino''s bootloader process.

If you put something like a line driver chip between the GPS and the RX line, you can use the driver chip's enable to connect/disconnect the GPS under software control...

I don't know if I'm explaining this very well: the basic idea is you use a digital pin to turn a switch on and off, and that switch hooks up/disonnects the GPS to the RX line. So your code, assuming the switch was on pin 3, would be something like:

void setup(){
int GPSlineEnable=3;
Serial.begin(4800);
}

void loop(){
digitalWrite(GPSlineEnable, HIGH);
//GPS is now connected

Note that you would need a pullup/pull-down resistor on the enable line to make sure the driver was disabled during bootloading.