I've finally got around to taking a look at your code. Some things I spotted that may cause problems:

First of all, bpp in my example stood for "bits per pixel", hence you needed to divide by 8. However, your code uses "bytes per pixel", so you don't want to be dividing by 8 in the GetBitmap function.

Secondly, and most importantly, you're freeing the data pointer at the end of the LoadTexture function so the header's data pointer will then point to freed memory.

I'll take another look some time tonight or tomorrow. Sorry about the delay!