Вот мои комментарии
1) Поскольку насос сообщений имеет только 1 поток выполнения, вам не нужно беспокоиться о полном или частичном ограждении, а ключевое слово volatile не будет иметь никакого эффекта.
2) INotifyPropertyChanged относится к событиям, и если один делегат в списке вызовов события завершится неудачно, остальная часть не будет вызвана, в результате чего свойство не будет обновлено.
3) Если вы используете вложенные насосы сообщений (например, модальные окна), тогда дочерний диспетчер может обновить ваше свойство перед родительским диспетчером, таким образом, сделав обновление не синхронизированным с ожидаемым.
4) если вы используете IValueConverter и конверсия не удалась, ваше свойство не будет обновлено.
5) Если вы используете явные триггеры обновления в своих привязках, это может оказать влияние (в зависимости от вашего сценария)