Any Brep face has its trims oriented so that the active region is to the left. That is, outer loops are counter-clockwise, inner loops are clockwise - relative to the surface normal.
A face has a m_bRev flag that tells if the face’s orientation is reversed relative to the surface’s natural normal.
3D edges have a rev flag that tell if the edge curve is oriented in the opposite direction of the trim.
I believe if you call the member function on ON Brep or maybe ON_BrepLoop that gives you the 3d loop curve, it adjusts it so the orientation is consistent with the trims.
To get a consistent orientation for all outer loops of a closed Brep, you probably just have to reverse the directions of those from faces with m_bRev = true. Then they should all be counter-clockwise with respect to a vector pointing outward.