The intersection is not discarded using symmetric difference in the intersect app.
I think that SymmetricDifferenceCollector::collect should not have the following code:
else if (face_class == FACE_IN) {
REV(orig_face, vertices, normal, poly_a, face_class, hooks);
}
When I comment these lines out, I get the expected results.