Let's not over simplify things. LOL
A sprite's collision mask is defined by 6 variables: x-offset, y-offset, left bounds, top bounds, right bounds, and bottom bounds. The offsets define naturally where the sprite will be placed in the room when no form of physics is applied. The offset doesn't even have to be within the sprite itself - you could have anorigin of (-32, -128) if you wanted. The game then calculates based on the offsets where each of the bounds will be in the room. Applying gravity based on a collision with the ground means you are telling the game to use the bounds to calculate a collision, then apply gravity to the y-offset. However when you change sprites, the game does not care about the bounds at all, it only cares about the offsets. So if the lower bounds are four pixels away from the origin in one sprite and 8 pixels away from the origin in the other sprite, changing sprites is going to change the bbox_bottom value. This causes the issue you're experiencing. One way around this that many Platform game programmers use is to set the origin at the feet so that the difference between the bottom bounds of any sprite will be the same. So instead of centering the origin both horizontally and vertically, only center horizontally and place it at the bottom of the sprite vertically. Do this for both your rolling sprite and your standing sprite. This way when you change sprites, bbox_bottom will not change.