Is there a way to prevent specific apps from using geo-location functionality/permissions when not running in the foreground? Is there a way to restrict an android app from using permissions when running in the background?  

For example, news broke recently that MoviePass is tracking location before and after movies (source)

I'm OK with using geolocation when the app is in the foreground... but not when I otherwise think it's off/closed.  Is there a way for permissions to be more granular?  I've heard that Apple devices can/do limit location services to apps running in the foreground.
Yes and no.

Some versions of Android allow control of a background activity manager.  In Android 9, the Adaptive Battery function can be used to force certain apps not to run in the background.  There are also 3rd party alternate apps which can provide the same functionality.  This means that there is a way to prevent geolocation whenever the app is not in foreground.

However, if you need to keep the app running while in the background, or if you are specifically interested only in a permissions based solution, the answer is no - not without root.

With root an app such as Tasker could be set up to run a task that modifies another app's permissions every time it is triggered.  See for example this Reddit post: https://www.reddit.com/r/tasker/comments/79yjrl/change_other_app_permissions/