From looking at 3.0, the OnSeparation delegate is fired
when two Fixtures (or Geoms) are touching each other one frame, and not the next.
When you dispose Fixtures (or Geoms), then they don't exist anymore, and so the
missing entities cannot be evaluated.
You may have to first force the fixture or geom to not touch using a number of
different tricks (perhaps ignoreCollisionWith? maybe not), then force a physics
pass to activate the OnSeparation, then dispose the bodies you want.
To be honest, from the sounds of it, the best thing for you to do is to dispose
your bodies you want to in your OnSeparation delegate that is fire from, again,
using a number of tricks.