NHiberante использует ID для кеширования сущностей в кеше первого уровня, а Id используется для проверки того, является ли сущность транзакционной или постоянной. При вызове метода SaveOrUpdate NHibernate не сможет определить, является ли эта сущность новой или она должна быть обновлена.
Также, если вы suddelny изменить ID объекта и сохранить его - вы можете обновить неправильную строку в базе данных.