I did a simple test with an intersection of a line and a circle. The line was completely crossing the circle and I could get the intersection points by iterating through all edges of the IntersectionPoint feature and collecting the StartVertex and EndVertex properties. You may check for duplicates as I got the same intersection points for the linear edge and the circular edge!
If you have some information about what type of objects are intersecting, you might reduce your code to support only those cases.
* If you know that you have a BSplineCurve intersecting completely a body, you can iterate through the following Vertices collection and use all of them, except the last two points (which normally represent the start/end vertex of the original curve).
* If your curve is a circle or a closed curve and intersecting a body, then you will have to use all vertices of the same collection (there is no start/end vertex in a closed curve).