KinematicBody have the
move api which suits well for character controllers, using a RigidBody in kinematic mode, if you want overlap checks+separation you will have to do it by hand (access. the space state, do motion queries, etc.).
The mode change of rigid bodies is useful only if you want to let a rigid body "rest" for awhile, otherwise are flexible as a rigid body in rigid/character mode (minus the access to the custom integrator and all the signals).