PyDev does not use pdb in the backend.
It uses the Python tracing directly (i.e.: sys.settrace and threading.settrace). This takes place at pydevd.PyDB.run (on pydevd_tracing.SetTrace(self.trace_dispatch) and threading.settrace(self.trace_dispatch)).
After the call to settrace, all the calls to a new frame should go through pydevd.PyDB.trace_dispatch (and then if the debugger determines it's a frame it should be tracing -- as the debugger is very optimized in regards to only tracing the places where a breakpoint is added -- the calls should go through pydevd_frame.PyDBFrame.trace_dispatch).
So, the first thing I'd do is do some prints on the trace_dispatch calls to get familiar with it on a small program and then move on to checking what may be happening at google app engine (the main thing there is probably getting the settrace in place -- you may want to check if the remote debugger works as it emulates a breakpoint in code).