Agreed, this is an awkward fix.

Maybe Weakened(), SetWeakened(), AdjustWeakened() could call a proc that makes the player drop their items, and call a cut down version of update_canmove()? Not sure what other uses of update_canmove() uses, but I imagine called Weakened() etc is implicit with dropping items anyway.