Angus Johnson - 2012-03-02

Thanks Michael. I've verified the bug and will upload the fix shortly.
In the meantime you can patch the code with this ...

in JoinCommonEdges() @ line 2986 and following ...

  //now cleanup redundant edges too ...
  FixupOutPolygon(*outRec1);

  if (outRec1->pts) {                          //added this check
    //sort out hole vs outer and then recheck orientation ...
    if (outRec1->isHole != outRec2->isHole &&
      (outRec2->bottomPt->pt.Y > outRec1->bottomPt->pt.Y ||
      (outRec2->bottomPt->pt.Y == outRec1->bottomPt->pt.Y &&
      outRec2->bottomPt->pt.X < outRec1->bottomPt->pt.X)))
        outRec1->isHole = outRec2->isHole;
    if (outRec1->isHole == Orientation(outRec1, m_UseFullRange))
      ReversePolyPtLinks(*outRec1->pts);
  }