When you rotate the upper and lower leg to compensate for the body moving upward, you end up with the rotation of the legs causing the feet to be perfectly on the ground both when the body is down and when the body is up. However, between these extremes the rotation of the legs may not result in the feet being on the ground. This happens because the leg rotation is moving in an arc and the body translation is moving in a straight line. To fix this you can 1) add more keys, or 2) adjust the curves.
Adjusting the curves is best. Click on the keys for the legs when the body is down, open the graph. Drag the timeline until you see the feet are furthest from the ground. In the graph, change the curve to bezier and adjust the curve until the feet are on the ground. Try different timeline positions and adjust the curve as needed. What you are doing is changing the speed of rotation for the legs so the feet stay (about) in the same place as the body moves.
You can also do the same technique on the body translation instead of the leg rotation. In that case you are adjusting the speed the body translates to keep the feet in place as the legs rotate.