It looks like you're just moving the character backward when they hit something, this can cause some pretty creepy results. What if they're facing sideways? They'll keep colliding with the wall and the program will keep pushing them back, but maybe it won't because it knows you don't want them inside the wall, but it doesn't know exactly what you want.

I always find that if you portray the computer as a sentient, but ignorant, being not only is it more satisfying you can solve problems easier.
Check out the object collision x/y/z() commands, they contain sliding data which you can use to move the object away from the thing it's colliding with.
Crazy Donut Productions
Current Project: KillZone