One thing that concerns me is what you do with your Y coordinate on a collision - because it doesn't appear to reset to the previous or adjust. Perhaps it would be an idea to do a line intersection check from the players head to well below his feet - then use that to guage the ground height. When you know the exact ground height, you can adjust the player Y coordinate to suit. Maybe increase gravity if there is no collision, if there is a collision then check the Y coordinate with the ground height and adjust as needed. That way you could check the slope where the player is trying to run to, if it's too steep then stop them, or even adjust the X speed according to the slope, ala Sonic the Hedgehog.
There is also sphere collision, which might work out nicely for platformer collision - you should check the demo supplied with sparky's.

Health, Ammo, and bacon and eggs!
