This issue has nothing to do with Load_state_dict(). The problem is when you created your model using MINIModel(a), you’ve set the reference of a as the data for the h variable via the following lines:
    if not h0 is None:
        self.h.weight.data = h0

Basically, any change to self.h.weight.data will be reflected in a because they share the same data. It can be reproduced by the following code:
class MINIModel(nn.Module):
    def __init__(self,h0=None):
        super(MINIModel, self).__init__()
        self.h = nn.Linear(3,4)
        if not h0 is None:
            self.h.weight.data = h0
    def forward(self,x):
        return self.h(x)
a = torch.ones(4,3)
m = MINIModel(a)
print('before loading, a is:')
print(a)
m.h.weight.data.add_(1)
print('after changing h.weight.data, a is:')
print(a)

To fix this, you can change:
self.h.weight.data = h0
to:
self.h.weight.data = h0.clone()