Hi!
May be the solution could be something like this:
1) check element class type. Analyze built-in types, for example, if it is Opening, then it is a "cut", return true in such case, if it is not a family instance, then return false (may be there are another cut built-in element types, but I can't imaging anything else now, but it could be false)
at this point you element should be family instance
2) recursively analyze geometry to get all solids with non-zero volume. If there are no solids, it is not either "solid" or "cut", it is just 2d element
3) check solid graphic style, if its property GraphicStyleCategory.Id == new ElementId(BuiltInCategory.OST_IOSCuttingGeometry) than this solid is a cut
If all solids has this graphic style, then your family instance is a void