I prefer lapras due to 2 stabs, freeze-dry (handles swampert well and unexpectedly), and more Hp than milotic, and more def ( also not to low sp def compared to milotic). Lapras makes a good wall, being able to take many hits from either side, while milotic is more of a special tank.
The truth is, it depends on your needs: lapras and milotic can play different roles.
Role 1: kingdra counter- a common strategy for kingdra is focus energy, scope lens, and sniper combo, which can be devestating, but with shell armor, that strategy will fall apart as kingdra can't get a critical hit on lapras. Now, I don't know much about VGC, so I don't know how common kingdra will be. Probably the least great out of these roles.
Role 2: switch in - if you decide on a Pokemon 4x weak to water, and you have him/ her out against a water type, you can switch to lapras to heal up some, which makes it a even better wall.
Role 3: rain team- this obviously won't work on your team, but I'll note this anyways. Any way to handle a wall is to use toxic, but with hydration, no more toxic on you, and you can use rest without any drawbacks.
Role 1: intimidate gaurd- competitive will boost your sp atk if milotic gets intimidated,which will probably be pretty common since VGC is doubles, I think.
Role 2: status taker- if milotic gets toxic, which probably she will, her defense will get boosted, which will handle that low defense.
As A Result:
milotic probably will fit your team better, due to intimidate gaurd.