I think something regarding the fact that these properties don’t fire the Changed signal was raised before. You’re already using the method correctly so your issue relies in the fact that these properties don’t fire the Changed method on update.
Properties that fire too often do not run the Changed event.
This event does not fire for physics-related changes, like when the CFrame , Velocity , RotVelocity , Position , Orientation and CFrame properties of a BasePart change due to gravity.
Both .Changed and :GetPropertyChangedSignal() don’t fire when variables are updated by physics. This includes movement variables like CFrame, Position and Rotation in your case. Instead people use RunService.Stepped:Connect() for this. (From what I’ve read and experienced myself)