Ну если не подходит ограничение в сеттере..то:
Вариант 1: Переопределить для своего класса TypeConverter, в котором будет перегружен метод GetProperties, чтобы возвращал адаптеры к свойствам. Внутри этих адаптеров (метод SetValue) нужно будет зашить логику валидации. Недостаток - если класс реализует ICustomTypeDescriptor, работать не будет.
Нашел похожее тут: http://www.gotdotnet.ru/Forums/Windows/272901.aspx
Вариант 2: Тоже TypeConverter, но уже для конкретного св-ва. Отталкиваемся от того, что PropertyGrid (PG) в своей работе вызывает метод ConvertFrom для того, чтобы сконвертировать введенное в PG строковое представление в реальное значение объекта. Причем TypeConverter.ConvertFrom вызывается раньше, чем SimplePropertyDescriptor.SetValue (что в общем-то логично). Следовательно, нам нужно вначале определить валидность введенных данных, и вернуть управление дефолтной имплементации в случае, если все Ок.