I use SDL_GP2X_WaitForBlitter(); to wait for the blitter. Is there an explicit way to force to wait for vsync?
WaitForBlitter() only waits for the last hardware blit to finish and won't make any difference between TV and LCD modes. To wait for the vsync you want to call SDL_GP2X_VSync().
I've never noticed the TV-out to go fast, the problems I had with it (at the hardware level) was after switching back to LCD from TV, if the TV hadn't shown an even number of frames then the vsync detection was returning inverted results (i.e. saying it was in vsync when it wasn't and vice-versa) which totally screws the timing up and made the LCD fast half the time.
I know there can be issues with the vsync detection (especially after the gp2x has been in TV mode), I'm looking into using the hardware interrupt to get better synchronization but it'll require either a whole new device driver or modifications to open2x's framebuffer driver.