That might be the problem
Sounds like you are over refreshing and introducing a weirdness.
Or when you do refresh your program doesn’t use the new generated token.
And it’s the original token dying that is when your authentication is failing.
It’s part of the oAuth specification, so not explicity documented.
And why the new/current refresh token is returned when you refresh.
The refresh token may change at refresh but it doesn’t have to.