Maybe it’s related to the BatchNorm layers.
Since you switched your model to .train() and used the test dataset on it, the running stats will be upgraded.
After this run, you switched back to .eval() and got a bad result.
However, this does not explain your second observation, that removing all Dropout layers yields a higher accuracy.