Lets do some testing...
The setup:
I have a structural column (I think its a stock Autodesk family). This family shows straight edges on Medium or Coarse views, and fillet edges on Fine.
(See attached images).
If I try to get the instance face or edge of the above mentioned structural column from the symbol reference (using your code), I get a NullReferenceException error if DetailLevel is set to Undefined:
gOptions.DetailLevel = ViewDetailLevel.Undefined;
Presumably because the PickObject is allowing me to select an edge or face that is non visible (I'm not sure how to confirm this).
The same is also true if I purposely mismatch my View Detail Level and my Options.Detail Level. For example:
Set View Detail Level to Fine
Set Options.DetailLevel to Medium
If I try that same code on a family instance where visiblity of edges or faces is not controlled by the view's detail level, then everything works out fine.
Looking up this property in the API help file I found the following:
Type: Autodesk.Revit.DB..::..ViewDetailLevel
Value of the detail level. ViewDetailLevel.Undefined means no override is set.
My guess is that there is some sort of disconnect between what PickObject is allowing you to select, and the Options class. I should also note that I tested this again to confirm that setting IncludeNonVisibleObjects to true or false made no difference in my test case.
To summarize, if I always make sure my Options.DetailLevel is set to that of my view detail level, then I shouldn't run into any problems (I hope).