Алгоритм совершенно не оптимизирован, непонятно зачем делать лишние действия, если все функции уже зашиты в один инструмент. Кстати Spatial join прекрасно работает не только с шейп-файлами, но и с другими фича-классами.
Задача стоит передать атрибуты из полигонов точкам, чтобы на выходе также остались только точки пересекающиеся с полигонами.
Выполнять select by location и уж тем более start editing точечной темы не нужно! Spatial join поддерживает как outer join так и inner join, то есть оставляет только нужные точки, которым передаются атрибуты от полигонов.
Сразу запускаем spatial join, указываем входные и выходные данные, убираем галочку с Keep All, удаляем ненужные поля, устанавливаем топологическое правило (пересекаться, содержать и т.д.), задаем радиус если нужно.
Все выполняется также быстро и из командной строки :
SpatialJoin_analysis <target_features> <join_features> <out_feature_class> {JOIN_ONE_TO_ONE | JOIN_ONE_TO_MANY} {KEEP_ALL | KEEP_COMMON} {field_mapping} {match_option} {search_radius} {distance_field_name}