Согласно документации Revit API для хранения информации об элементах во внешних хранилищах данных рекомендуется использовать UniqueId.
Это надёжно, UniqueId остаётся неизменным в пределах модели в отличие от ElementId.
Однако UniqueId всё же может меняться в процессе работы в модели при казалось бы безобидной операции - "Зеркало".
Выберите какой-нибудь элемент, запишите его UniqueId и ElementId:
Я выбрал балку, вот её свойства:
Затем примените команду "Зеркало".
UniqueId и ElementId элемента изменились после выполнения команды:
На мой взгляд это явная недоработка, я не обнаружил описания такого поведения в документации. Рекомендаций для разрешения этой проблемы я не даю, зависит от конкретной задачи. Учитывайте эту особенность при разработке плагинов, где предполагается обновление элементов в пределах модели, либо работа с внешними источниками данных.
Успехов!