I think nobody knows why this is happening, I wasnt able to find any answer.
I did my own investigation right here: TokenResponseException - Error:"invalid_grant", Description:"", Uri:""
and here: How to acquire a new Access token using Refresh token in Google OAuth 2.0 in .NET?
And it is still unknown why this is happening.
I though it has something to do with access token expiration, but I am not sure, I wasn't able to figure out, AFAIU credentials token must aquire a new access token upon its expiration automatically when accessing Google API with a credentials token that contains expired access token and refresh token assigned (that was received the very first time and saved). And of course there is a limit of how many access tokens you can request - 25, or you ganna get "Invalid Grant: The refresh token limit has been exceeded (default is 25)."
The Token is an object that contains 2 other objects: AccessToken and RefreshToken. If RefreshToken is set to a value received upon authentication, then, if AccessToken expires after 1 hour, when you make a call to Google API, it should use the RefreshToken to acquire a new AccessToken. How exactly it does that - no idea, it should be internal hidden implementation of Google API.
Or I could be mistaken :)