OK, thinking about this one some more, I’ve been approaching this one all wrong.
When I was thinking angles, I was thinking how to arrive at a certain location in space on a 2D plane (eg. traditional Trig).
The problem on a sphere, is that you need to understand it’s direction of travel, meaning you would need to update its origin.
The easiest way that I could think of in blender, would be to use two empties.
everytime the ball changes direction, you would have to move both empties to the same location (less 0.00001 - Otherwise you would get some strange momentary wigging out) in the last direction of travel.
One empty would be an origin target, the other would follow (Track To Constraint) the centroid of the sphere.
Then you could track back to the origin target, effectively giving you the local direction of the sphere.
This causes a slightly different problem to be worked out.
But you could use the Z Rotation of the Tracking Center Empty, and you could use the Local X-Axis of the Centroid empty for the roll amount.
If you could then combine the two and copy the rotation values via the Constraints (because you have the options there for local/transform/world outputs), you technically should be able to get the correct roll effect.
The tricky part would be to update the origin empty, and the Centroids X-Roll Angle (Based on current Angle plus change in distance again).
I think this will really depend on your context.
Game, animation, etc…
if it is animation, you would probably be wise to add a driver function to do this on frame change.
Anyway after mulling it over in my mind, this seems like the most reasonable approach.
Please let me know if you do anything with it.
Good Luck!