It should be noted that I’m only guessing about what happens here…
My guess is that j becomes equal to j2 inside the loop, by one of the assignments. But then the increase j += inc happens and j is no longer equal to j2 when the loop condition is checked.
Generally speaking, a for loop is equivalent to a while loop:
for (a; b; c)
    d
is equivalent to
{
    a;
    while (b)
    {
        d;
        c;
    }
}
That means your first loop is equal to (with extra comments added)
{
    int j = j1;
    while (j != j2)
    {
        if(j < 0)
            j = curve2->controlPoints()->size()-1;
        if(j >= curve2->controlPoints()->size())
            j = 0;
        curve->addControlPoint(curve2->controlPoint(j)->pos(), curve2->controlPoint(j)->triangle());
        // At this point `j == j2`, so the loop condition is false
        // BUT then you do
        j += inc;
        // Here `j != j2` again, and the loop condition is true and will continue
    }
}
Perhaps your loop condition should be j - inc == j2 instead?
solved C++ for loop continue to loop even though it shouldn’t