I have exactly the same problem:
KinematicBody2D player needs a different collision rectange when it walks VS when it ducks VS when it swims. I have a separate
CollisionShape2D for each state, and I use
CollisionShape2D.disable so that only one of them is active at a time. It works, except, because the effective collision shape changes suddenly, it might will overlap with another collision shaple (like a wall tile or enemy), and the physics engine doesn't allow that. So usually it automatically teleports the character on some direction to get rid of the overlap. This teleportation sometimes leads to comical glitches, since the engine can't know what makes sense gameplay wise. Worse, sometimes it lefts the player stuck inside the wall... There must be a common way of handling this... So I also wonder what's the best practice.