I cannot reproduce the difference for the nn.GRU module in isolation:
device = 'cuda'
x0 = torch.randn(5, 6, 14, device=device)
model0 = nn.GRU(14, 14, batch_first=True).to(device)
out0 = model0(x0)

x1 = x0.permute(1, 0, 2)
model1 = nn.GRU(14, 14, batch_first=False).to(device)
model1.load_state_dict(model0.state_dict())
out1 = model1(x1)

print((out0[0].permute(1, 0, 2) - out1[0]).abs().max())
> tensor(0., device='cuda:0', grad_fn=<MaxBackward1>)
print((out0[1] - out1[1]).abs().max())
> tensor(0., device='cuda:0', grad_fn=<MaxBackward1>)

So the difference is most likely coming from another part of your code.
I would recommend to slim down the code by e.g. removing the data loading etc. to get rid of potential sources which could add randomness.
Also, since your model is using dropout you have to be very careful to seed to code in the appropriate place and make sure the same calls to the pseudo-random number generator are performed in both scripts. Thus I would just remove it or call model.eval().