I just got caught out by a related phenomenon
MIDI automation can trigger the callback of a knob but it won't trigger a panel repaint within the knob's callback. However using .changed() instead of repaint will.
Here's an example. Moving the knob with the mouse will repaint the panel, but if you use MIDI learn to assign a CC to the knob, moving the CC will change the knob value but it doesn't repaint the panel, swap out repaint for changed and it works fine.
HiseSnippet 1090.3ocsV0saaaCElxIJq1adXcnO.B4JYrNC6s1tgELDm3jzYzkTi4zhcWAiDsMgoHEHoRhaPtaOO6UXOK6ts65av1gjRQLsNcsFX5Jc34G9cN5b9NZrTjPTJgDEz7zk4DTvmENYIWOe3bLkiFc.JXqPMQoQ6uLGqTjTTPvFO0nKn4lH6ya1ceLCySH0GgPuTPSH+LMipqOc7fmQYrivojSoYdV+nAiRD7gBln.vwFg8P43jE3YjSvFyZDBf3vTpVHmnw.X.a1WjtbxbwEbm8ujpnmwHFg9nIPfbGiFNmxRGWkiJDJXyw0Y7FtL9AgGSSo2bdcl+EVEQ0d3WCBZbaHs4sfT+6BRGIXol.bGvKvCda5f28CmjHo45ZMFr8ogi3ZhbJFJ69vxYKpgrQ3PAXAW2MCufbjDDtwi3mzq2Cidbudc1ocq1srev6lRlRjCwL1YPwWEqkEDmZ3aiRGcNVFMFyIr9Q+XTUnmQzCEY4BNHDusS81NubBcUD8Xndp+EQglxIwSK3IZpfGOqS6VW0tUD7.QSIXjt4RpILRRtwCabLpm0cJz1rGiE6ZQTcufpmuGKeNN9XLfbIlmB4VLjS86U9zAduSmcL92t00NHQ4L.BQUPHRveFWbVeSxHEr3jpL4gPxxfr+t.XUQJ5TIc1Lhjj9CQaG8UkdAWUyxjuLShMmcsEBqtvYgw1cLEqRvTcEw2Fil.4A+SDZxy4wcZcUqlsttUzaqZ5zUpqLXLhbkpMCmx2miw7hryHxpxTkgPG6sGI15CajHwUS7LTvGwo5mmSJkqGZ5uhgFTYQ0L9ThPvTsc34yKGdlvnoDIhBA4SBsUTjE70jP+0tnWL5.rFWEFHhvsjSjZpIYBNfbNPo4lIaFd.QsPKxA1oa9NBbm+mW5k0W3NCVVKLXfRuzTZ1xZHJillxHiEJpoz6w09GJMIeB80Vje0C98m9mu921MymNFgxvW5yNqJlNkdokGEFjxTZ.aix.5UTvWF9BEIBl7wELcjZADGXDYAI8Tg0djWxskK4ZWQGYZws418Bcs6dIWzB+j6mFbAMUOGEDF7FPbNgNat1H821sBuCiGv6JRKXX8sIiMacJUXpI9rdFlMNTqV5m2eDLz8VIC8Ja19.g68CGS0IyWMdarB7Bsc+ei2x8csCOb5TRhtFraFdzuttK29HfhaGvLfyVZ5GCOoHaBvmmP.jvgNHkomngYf1I2yHapLSH7Tqv+.OkJ6ajCJU1uRIz6mHEuJwQCX1ndO6I.l31elnY3wF4nal+CC60smYdi9pjDSo3q6iPq1muYM74aWCedzZ3yiWCedxZ3y2sF978uWeL+i0dEZQlaLolDG1OA+miuf6CtWGs+eAYuqQ7TxkUMCP2qT6OgcHO0mf3nBF6crwb3aY2jEjK7ks2IjR9Tv6ogl5yJzjZt9Q7ygkGtAJzwiOztbIH3PNFFcbm9uS1WFl.