The problem lies in passing the modal op’s events to the HUD drawing function.
For whatever reason the events don’t update as they should, when the op is called from a keymap, but do update fine when called from a menu.
This looks more like a Blender bug to me than any fault of mine. To work around it, self.HUD_x and _y could be set from the ops modal(), in which case it will work fine for both situations.
Zurions solution also works, but creates a fixed HUD, no longer tied to the mouse.