業務上起こりうる状態で例外云々の言いだしっぺです。

そもそも2重更新が発生することが業務的に想定外ならば例外でいいと思う。
それは設計上のミスであるか、ロジックの不具合だから。
逆に、想定されるケースにもかかわらずにチェックをサボって
例外投げてたらビジネスロジックの品質が残念ってことでしょ。

話がごっちゃになってるようだけど、
上記は「ビジネスユースケース」単位の実装をしたロジックレイヤーで見た場合の話ね。
個別の機能で見れば、例えば永続層は2重登録されそうになれば例外を投げるのは当然。
呼び出の際に「事前条件」「事後条件」「不変条件」が破られれば、
即座に例外状態を表明するのは各コンポーネントの義務だから。
コンポーネントの粒度(呼び出し階層の位置と条件による契約)によって、
「ある状態」が意味するところが変わるだけ。
この原則はアプリケーションの規模が呼び出し3層だろうがなかろうが基本的に変わらん。

大事なことなんでもう一度
プログラムが業務上起こりうる状態でExceptionを投げるのは
(一般に)正しい実装ではありません。