You code should rename the self.conv1 layers:
class ModelA(nn.Module):
    def __init__(self):
        super(ModelA, self).__init__()
        self.conv1 = nn.Conv2d(1, 6, 3, 1, 1)
        self.fc1 = nn.Linear(6*4*4, 2)
        
    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = self.fc1(x)
        return x


class ModelB(nn.Module):
    def __init__(self):
        super(ModelB, self).__init__()
        self.conv1_v2 = nn.Conv2d(1, 6, 3, 1, 1)
        self.fc1 = nn.Linear(6*4*4, 2)
        
    def forward(self, x):
        x = F.relu(self.conv1_v2(x))
        x = self.fc1(x)
        return x

modelA = ModelA()
modelB = ModelB()
state_dict = modelA.state_dict()
state_dict_v2 = copy.deepcopy(state_dict)
for key in state_dict:
    if 'conv1' in key:
        pre, post = key.split('.')
        state_dict_v2[pre+'_v2'+'.'+post] = state_dict_v2.pop(key)

modelB.load_state_dict(state_dict_v2)
(modelB.conv1_v2.weight == modelA.conv1.weight).all()

If you want to filter out some parameters, you could adapt this dict comprehension with your condition:
state_dict_filt = {k: v for k, v in state_dict.items() if 'fc1' in k}