Hi Sean,
I use TopExp::MapShapesAndAncestors(Shape, TopAbs_EDGE, TopAbs_FACE, TopTools_IndexedDataMapOfShapeListOfShape) to get edge/face relationship. If the shape is in non-manifod mode, one edge must be shared by more than 2 difference faces.
Ding