Oh! I've got it! With more tweaking I can make it accurate, I could potentially shrink the width now of the collision shape among other things and it's also working more as expected, I was having issues getting this method to work and hadn't realised there was a minor bug involving disabling and enabling colliders. People posted online that call deferred worked best so that's something to remember.
Thanks for the tips, they pointed me in the right direction.
if Input.is_action_pressed("Crouch"):
isCrouching = true
playerCollisionShape.set_deferred(("disabled"), false)
playerCrouchingCollisionShape.set_deferred(("disabled"), true)
speed = crouchMoveSpeed
elif raycastCeilingCheck.is_colliding() and isCrouching == true:
isCrouching = true
playerCollisionShape.set_deferred(("disabled"), false)
playerCrouchingCollisionShape.set_deferred(("disabled"), true)
speed = crouchMoveSpeed
elif not raycastCeilingCheck.is_colliding() and isCrouching == true:
isCrouching = false
playerCollisionShape.set_deferred(("disabled"), true)
playerCrouchingCollisionShape.set_deferred(("disabled"), false)
speed = defaultMoveSpeed
My only gripe with this method is it seems to be being fussy somehow about height, however I think with more setup tweaking that can be fixed, for vent crawling it might be more of a scaling issue I need mess with.