Well, personally I would go with a 302.
The reasons are:
301: the browser "remembers" that 301, so next time the user request that page, their browser will automatically redirect as the last time it accessed the page. However, the 302, as a temporary redirect will let the browser know that it should re-request the page.
Say your website www.example.com holds an english version in the root, and then a german version in www.example.com/de. If a german user accesses the site for the first time, you do the geolocation check and redirect to german version while saving a session/cookie of the chosen version. Then if the user chooses to switch to the english version you update that cookie/session to save the one that the user chose to navigate and make a 302 redirection. Next time the user accesses, having the cookie will automatically show/redirect to the appropriate language.
Using the same example, if you did a 301, then even if the user changed the language, as the browser already has a 301-permanent redirect, he will be redirected to the "first version served".
SEOwise, if we take a quick look on Google, they use 302 to redirect users to the "appropriate" version, so I guess that should be ok as long as you use rel="alternate" to point to the other versions of your site:
https://support.google.com/webmasters/answer/189077?hl=en
EDIT: link juice flows to the page that the link is pointing. Say a link points to www.example.com then the juice goes to www.example.com, even if that page has a redirection to the german version (when accessed from germany). Anyway, it is said that 302s also pass some pagerank.
Hope that helped.