I guess somehow your model is doing something wrong with the batch dimension.
you can narrow your problem down by doing simpler test only on suspicious parts of your model.
def test(model, in_shape):
    batch_size = in_shape[0]
    input_all = torch.randn(*in_shape) # input does not have to be test data
    input_1st_half = input_all[:batch_size//2]
    input_2nd_half = input_all[batch_size//2:]

    output_all = model(input_all)

    output_1st_half = model(input_1st_half)
    output_2nd_half = model(input_2nd_half)

    output_concat = torch.cat([output_1st_half, output_2nd_half], dim=0)
    return torch.allclose(output_all, output_concat)

model = nn.BatchNorm1d(10) # model does not need to be trained
model.eval()

test(model, [16, 10, 31])