Because BN uses Bessel’s correction on variance in eval() time but not in training time. 
Ref: paper https://arxiv.org/pdf/1502.03167.pdf 19
If you undo the correction in eval, i.e. model.bn.running_var.mul_(99 / 100.), it should give you the same results. It also explains why the difference is smaller when you have more elements, because n / (n-1) becomes closer to 1.