Try using vtkCleanPolyData on the STL data. With vtkCleanPolyData, try a few different values for SetTolerance(), e.g. 1e-7, 1e-5, 0.001, 0.1. You can also try vtkCleanPolyData before vtkContourLoopExtraction.
To find the outer vs. inner contours, use SetNormal() with vtkContourLoopExtraction. Use the same normal as your cut plane. Then, after you get the loop polygons, check to see if their normals point in the same direction as this normal, or if they point in the opposite direction. The direction of the normal should indicate whether it is an inner loop or an outer loop, if vtkContourLoopExtraction extracted the loops correctly.