Если ExceptPoints - это list - то у него Contains достаточно долгий. Тем более вы в него еще и аллокацию делаете, и так на каждый пиксель - дичайшее количество проходов по массиву.
Быстрый вариант: для ExceptPoints использовать HashSet, но тут есть вопрос с сравнением экзепляров. Возможно не Point придется хранить, а кодировать в int. Что все равно быстрее.
Еще из вариантов - отсортировать ExceptPoints, и каждый раз поиск (Contains) начинать с предыдущей найденной точки. По сути - удаление из списка, но без удаления - потому что удаление тоже долго.
Опять таки сортировка может очень выручить - тут надо подумать.
Ну и самый простой вариант - это маска. Т.е. вы храните массив bool длины, равной количеству пикселей, где значение - это исключать или нет эту точку. Будет очень быстро, но неэкономно по памяти.