Questions About BRepOffsetAPI_MakePipe

I have a couple questions about the BRepOffsetAPI_MakePipe class.

#1:

The documentation for the constructor of BRepOffsetAPI_MakePipe claims that "The angle made by the spine with the profile is maintained along the length of the pipe". How is the angle between the spine and profile defined? At first, I thought that the angle would be defined at a point as the angle between the profile's normal and the spine's tangent. But that definition doesn't make sense because it doesn't fully specify the location of the profile.

I've done some experiments to test things out. In the picture below, I sweep the profile along the spine:

The resulting topology looks like (viewed from a different angle):

At the beginning of the sweep, the profile is aligned with the +Z axis. However, by the end of the sweep, it is no longer aligned with the +Z axis. Why is this?

#2:

How can I compute the angle between a spine and a profile? I assume that I cannot compute the angle between the two topological objects (TopoDS_Face and TopoDS_Wire) used to do the sweep, and I instead need to compute the angle between the two underlying geometrical objects (GeomBSpline_Curve and Geom_BoundedSurface).

#3:

Sometimes when I do a sweep using BRepOffsetAPI_MakePipe, the resulting topology isn't closed. See the picture shown below:

I would like to be able to check if the swept geometry is closed. So my question is: Given a TopoDS_Shape, how can I check if it is closed? I know that the TopoDS_Shape class has a Closed() member function, but it doesn't seem to work correctly. In my testing, Closed() returns false even when the topology is obviously closed.

Thank you guys for all the help, I really appreciate it!