you don't explain your use case or your setup.
AquireTokenSilent works by storing a the refresh token in a cache (if a web farm, this should be a distributed cache or it may not be found). On a call to AquireTokenSilent the refresh token is retrieved from the cache, then used in a call to the OAUTH server to get an access token. If not found, or expired, then a new refresh token is required.
to get an id and refresh token from the OAUTH server, the user must login again to the OAUTH server. The AquireTokenSilent() code redirects to the OAUTH server requesting a token. The user logins to the OAUTH server and the OAUTH server redirects back to the original website, which then store the tokens and request a new access token with them (also updating the cache). If the OAUTH servers login cookie has not expired, the OAUTH server will not need to ask for credentials, and can redirect back silently.
So in your case on a POST request, the refresh token is not found (maybe a recycle) or is expired. This causes a redirect to the OAUTH server losing the POST data, After authentication, the OAUTH server redirects back to web site. The web site stores the token and redirects to the original url. A redirect is of course alway a GET. Your action log is missing the GETS to the OAUTH server. If you look at the browser network trace you can see them.
Your application code will need to handle this case. You can implement a GET method for the post pages that displays message for instance. These actions could be a simple redirect to a message page, or set up the original page that was doing the post with a message,