My “solution” in this case is to increase the tolerance a few times until the curves are joined:
double originalTolerance = 1e-12;
double tol = originalTolerance;
Curve curvesToJoin; // this is the collection of curves to join;
Curve joined = curvesToJoin;
int n = 0;
while(joined.Length > 1 && n < 6)
joined = Curve.JoinCurves(curves, tol);
tol = originalTolerance*Math.Pow(10, n++);
if (joined.Length > 1) // uh-oh, the curves are still not joined.
Ok, I know this is C#-like pseudocode, but I hope you understand what I mean. Basically, you increase the tolerance with a factor of 10 in each iteration of the while loop until either the curves are joined or the tolerance has become too large.
I have edited some stuff - it should be OK now.