It is an interesting scenario, isn't it? The starting material reacts with another compound to form a species which catalyzes the decomposition of the starting material.
I do think that this:
Even if all the nascent Cl reacted and none was lost as Cl2 gas, the evolved O2 is almost the entire mass fraction of the peroxide.
is incorrect. Given the equations from the link, for every mole of chlorine that is produced, one mole of peroxide goes directly to form water. Since the O2 producing reaction consumes a mole of chlorine, the very most you could lose to oxygen is half the peroxide.
Since we get "moderate steady bubbling that last for several hours" I'm assuming that the second reaction is relatively slow (reasonable, since it's the oxidation of something that's already pretty highly oxidized) and that the solution contains a high concentration of latent and dissolved chlorine as Cl2, HOCl, and more complex chlorine oxide species. This is a pretty reasonable conclusion since, after all, this reaction mixture is effective at your halohydrin reaction!
Do you have access to a UV-Vis spectrometer? You could place some of the reaction mixture in a cuvette and monitor the absorption over time. I think molecular Cl2 absorbs at 325-350 nm. You could even get some kinetics for the reaction this way.
I assume the styrene reaction is biphasic. That complicates things considerably, because it is essentially an extraction. Cl2 is extremely polarizable and nonpolar, so it would get schlepped into the styrenic phase (making it unavailable to decompose peroxide further) and virtually ensuring it would react with a molecule of styrene. Then (here's the clever bit) the chloronium ion which formed would be polar enough to re-partition back into the aqueous peroxide phase, where it would most likely react with a water molecule. (Reaction with a peroxide molecule would give you some side products including alpha-chloroacetophenone).
tl;dr Whoever designed your reaction is a smart cookie.