Ist ja auch kein Wunder, dir fehlt der Where zum Update.
Wenn der Select nichts findet, wird insgesamt NULL zurück geliefert. Da kommt der innere Coalesce dann zu spät.
Also nach der letzten Klammer noch ein Where auf die Daten, die auch tatsächlich vorhanden sind.

Der Rowupdate erlaubt ja nun leider kein Gesamt coalesce.

Eine Idee hätte ich noch:

select .....
union values( xx.Bet, xx.Wert )

fetch first rows only
)

Besser wäre aber die Where-Klausel.