All of your problems come down to animation.
All animations have a fixed timer lenght of 4 video frames. This is based on a global timer, there is no dedicated timer for this.
So a single animation frame will be displayed for 4 video frames. A 2 frame animation will take 8 video frames to loop around(eg. Idle animation).
Roll State can transition to Idle(and then from idle to other states like Jump up or pickup) only on start of a new/last Animation frame(which, as I mentioned, lasts 4 video frames).
When Dizzy is in Rolling state, unless theres a wall in his way, he will move at a rate of 1px per video frame.
Also, Dizzy can exit Roll state only when he gets to end of Rolling animation. This is when check for Roll ending happens.
So, If Dizzy was to jump while his animation is on last video frame, he will roll as intended.
However, if Dizzy was to jump on video frame no.2, Dizzy will Roll extra 2 video frames(and 2 extra pixels)!
You can counter this. Remember that some animations can only transition on last video frame.
For example pickup animation as well as jumping up animations do. So jumping before jumping to a side and rolling will result in consistent roll distance.
I looked at a pause affecting this but there is nothing.