Mostly I re-purposed the code that had been doing the same thing using StringParameterFilters before which is hooked to the catalog.  The new filter though maintains two sets of style names.  One that the user picks, and another that is synced tot he layer.  Then when asked for allowed styles, it provides the intersection of the two sets, or just the automatic set if the user specified set is null.  So the user and the synchronization never step on each others toes.