Well that's hardly complete and minimal code (not to mention extremely redundant code), but my guess would be that your character moves enough pixels per frame that there simply is no frame during which he intersects the rectangle yet is still above it.
You need to design some collision logic that doesn't rely on frames taking specific lengths of time. The simplest approach I know of is looking at where the player is and "should" move to (given player input, gravity, momentum, delta time, etc), and see if there are any obstacles between the two points.