In G4OpBoundaryProcess.cc lines 179-181, the code checks to see whether a parallel-world step (hStep = G4ParallelWorldProcess::HyperStep()) exists. If it does, that step _replaces_ the normal (mass-world) step (aStep) passed into PostStepDoIt(). Unfortunately, this is not correct behaviour in general. One problem for optical physics is that the HyperStep won't have the correct combinations of pre- and post-step points to satisfy the various conditions tested later in the code. I suspect that to properly treat parallel-world optics, the code is going to have to carry around, and apply tests to, both aStep and hStep. A second problem is that, at least in 10.02.p03 the HyperStep() is not always properly updated when a mass-world boundary crossing occurs. I am reporting this issue separately (under processes/scoring). One consequence of this second issue is that an optical photon can pass through an ingoing surface to a volume without triggering boundary actions, and later bounce around inside that volume when boundary actions are triggered.
*** This problem has been marked as a duplicate of problem 1953 ***