Thanks for the update.
Based on these observations my best guess is that the batchnorm statistics might not reflect the underlying dataset stats, which would explain why the training data is also creating a high loss in model.eval().
How large is your batch size and could you drop the potentially last batch, if it’s smaller, via drop_last=True in the DataLoader?