For USB, the easiest way it to monitor for the presence of VBUS.
I'm not sure what you mean by "overcurrent", you shouldn't need to load the USB power line much if at all. If you're really worried, stick a 10K resistor in series with the USB Vcc, and just run it to an input pin. That should protect you from any faults.
Unfortunately, for serial, it can be a lot more involved.
If you're lucky, your system uses either inverted TTL level signaling, which means the line level when there is no traffic is Vcc, or RS232 level signaling, which means the no-traffic line voltage is either ~+10v or ~-10v, depending on whether your bus is inverted.
Then, you can simply monitor for the voltage level. 0v means nothing connected.
If you're unlucky, your system uses TTL level signaling, with the quiescent bus state being 0V. In this case, really the only possible way to determine if a device is connected is to actually send out some traffic, and see if you get a response.
It seems that what you are attempting is quite similar to what is implemented in the Arduino. See e.g. Arduino Uno's schematics. It requires a few external component (a MOSFET to serve as a switch, a diode, etc). to be implemented. I'm not familiar enough with the Raspberry Pi, so I dont know if this scheme could be implemented without modifying the board.
Best Answer
Usb power banks tend to detect in two ways. One is by the pull up and pull down resistance on the data lines. As the RPI power input has no data lines connected, it won't detect a change of state. The other is by how much current is pulled once the plug is connected. If the RPi doesn't pull enough for the bank, the bank will think it's done and goes to sleep.