Нужно отсечь все пересекающиеся окружности. Тривиальнейшая задача, но при реализации возникают непонятки.
Мне кажется, что проблема может быть из-за того, что внутренний цикл (c x2 и y2) проходит по слишком ограниченной области — по прямоугольнику от (x1, y1) до (width, height), хотя должен пройтись по всем элементам прямоугольника (x1 + 1, 0) — (width, height) и по элементам (x1, y1 +1) — (x1, height).

В вашем же случае никогда не произойдет сравнения таких точек, например, как (x1, y1) и (x1 + 1, y1 -1), т.к. вторая не входит во внутренний цикл.
ну дык возьмите точку, которая не отрезается и посмотрите, что с ней происходит. Кэп как бы намекает.