It's pretty hard to get the precision your looking for using timedelta, and collision detection.
If you want to go with your own movement I'd suggest not using collision detection at all, and just compare the x, and y values for everything.
Like if player y is greater than this, set .y to clamp(int(.y+ speed* timedelta),lowest y, highest y) for a fall.
Even then you might want to use the corner x, and y values, as just setting the hot spot to a corner may cause issues.