If you know the normal of the landing point, you can get the after-landing forward direction by projecting the current forward onto the plane defined by the normal.
From there, it should be possible to build a quaternion to represent the final rotation using the forward and up vectors. For example, unity has a Quaternion.LookRotation function that does this. If you have to implement this yourself, there are several examples you can find with a quick google search of how to build the quaternion from the up and forward vectors.
As for actually rotating, the easiest way is probably to interpolate over time between the current rotation and the desired after-landing rotation with a Slerp. Since you already have a prediction for the landing, you could use a fixed duration for this interpolation (say, 0.5s), and when you are 0.5s away from touching the ground, record the current rotation and start interpolating between that value and the desired rotation.