What didn't work with the rotate function? have you changed the origin location? by default it is usually in the middle of a sprite making it spin if rotated, but if you put the origin to the bottom middle of the sprite, then when it rotates it will look like it's tipping over.
As for how to pull of the mechanic, sounds complex. I'd probably start by having a variable for balance, where 0 is the character is upright, 90 is fallen over right and -90 is fallen over left. then you'd need to have the controls add or subtract to the variable, and find a way to make the variable change according to how off balance the guy is. I would try multiply the balance by a number greater than 1. if balance is zero, he will stay at zero, but the more off balance he is (plus or minus) the more the multiplying number will affect the value.
as for moving according to the balance, I'd play around with move at angle, or x vector actions to move according to the balance variable