Short answer: call pDestinationSurface->SetClipper( NULL ) before you do any blting and you should be set.
The default behavior is that a Blt will fail if any part of the destination rectangle is offscreen. (Basically, you've passed in invalid coordinates!)
If you set a clipper (see ), the behavior changes so that if the destination rectangle is partially outside the clipping region, the source/destination rectangles are adjusted for you.