I cannot reproduce this issue with this dummy code:
class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 3, 1, 1)
        self.conv2 = nn.Conv2d(6, 12, 3, 1, 1)
        self.drop = nn.Dropout(p=0.0)
        self.fc = nn.Linear(12*7*7, 10)
        
    def forward(self, x):
        x = F.max_pool2d(F.relu(self.conv1(x)), 2)
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = x.view(x.size(0), -1)
        x = self.drop(x)
        x = self.fc(x)
        return x

model0 = MyModel()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model0.parameters(), lr=1e-2)

data = torch.randn(100, 3, 28, 28)
target = torch.empty(100, dtype=torch.long).random_(10)

# Train for some epochs
for epoch in range(10):
    optimizer.zero_grad()
    output = model0(data)
    loss = criterion(output, target)
    loss.backward()
    optimizer.step()
    print('Epoch {}, loss {}'.format(epoch, loss.item()))


# Save state_dict
torch.save(model0.state_dict(), 'tmp.pt')

# Reinitialize both models
model0 = MyModel()
model0.load_state_dict(torch.load('tmp.pt'))
model1 = MyModel()
model1.load_state_dict(torch.load('tmp.pt'))

# Disable gradients for model1
for param in model1.parameters():
    param.requires_grad_(False)

model0.train()
output0_train = model0(data)
model0.eval()
output0_eval = model0(data)

model1.train()
output1_train = model1(data)
model1.eval()
output1_eval = model1(data)

print((output0_train == output0_eval).all())
print((output1_train == output1_eval).all())
print((output0_eval == output1_eval).all())
print((output0_train == output1_eval).all())

Could you compare your code to mine and check for differences?
Also, if possible could you try to create a reproducible code snippet so that we could debug it further?