I'm going to answer my own question here, in case anyone was also wondering.
This article pretty much solved the issue for me. Following her guide, I rebuilt my sign in screen and am no longer using the built-in signInWithGoogle functions. She also includes an axios call at the end in order to get a new access token from a saved refresh token. I don't know why, but I couldn't get anything else to work to refresh the token. This was the only thing that worked for me. Saved me a ton of time and frustration.
I also tried using blocking functions to save the refresh token when a person signs in for the first time, and that worked to save the access token and the refresh token. But I couldn't ever get the refresh token to give me a new access token after it expires. I didn't try it with the axios call in the above article, so it might have done the trick if you don't want to go away from the built in sign in functions.