How to force IPropertyTypeCustomization to redraw

Assign the result of CustomizationUtils.GetPropertyUtilities() to a member variable of your customization class.
Then in OnValueChanged, called RequestRefresh() on that pointer. Pretty sure that should do it.

An alternative approach is to just use delegates to provide dynamic visibility for different parts of your customization, so you don’t need to rebuild. That can get messy if you have a complex customization though.