Actually, I thought of something else: why not just add a check in LISTBOX_UpdateSize itself to see if width and height have changed at all? And if they haven't, just return early?
This should alleviate any issues since in this case, calling UpdateSize from SetColumnWidth when the size itself hasn't changed shouldn't do a thing (it will return early from it and not invalidate anything).
If that's ok, I will prepare a patch for that. (obviously, it will be a separate patch, this one is still valid in this case)