Do not access the array before testing if any intersction occured. At that point in time (when you test on an element of the expected result array) you can no longer avoid an error, because you might not have received any array at all! (this is why you get an error sometimes)
And exactly that is what the Boolean on the row above is good for - namely for testing if you get any array at all in return from the intersection function.
Therefore try like this instead:
Dim IntersectWasFound As Boolean = Intersect.Intersection.BrepBrep(sb, brep, 0.001, crv, pts)
If Not IntersectWasFound Then
' Msg about the fact that no intersection occured.