Getwork and GetMemoryPool - why is previous block hash different?
The value of previousblockhash in getmemorypool output is the block hash in big-endian order.

The value of data in getwork output is formatted as I described in this answer to your question about how hash1 is calculated.

This byte order reversal on 4 byte words is done by a function called FormatHashBuffers in main.cpp.  It's only done for the data and hash1 fields of the getwork output.  There's no comment explaining why it's done.