ой-ё... рекурсия, метод лесного пожара, емнип.
Не, если нельзя ограничить глубину вложенности - само собой можно схватить преполнение стека.
понятно, что всё придумано до нас, но если изобретать велосипеды - я бы завел список из TPoint с невозможностью добавления дубликатов (например - TDictionary) и проходил бы по нему вашим алгоритмом, но вместо рекурсивного вызова - добавление точек в список. Точки, закрашиваемые красным - удаляются из списка. Если на очередном проходе списка количество элементов = 0 - мы обошли всю фигуру.