Проблема здесь в том, что вы пытаетесь смешать то, как все должно быть сделано, и то, как Microsoft заставляет вас это делать ...:)
Но мои разговоры в стороне от этого, я думаю, что вариант 3 звучит наиболее чисто. Конечно, не 1, это худший на сегодняшний день, и я думаю, что подписка на ваши собственные события изменения свойств может привести к некоторым причудливым проблемам, которые трудно будет отладить, когда какой-то плохой сок попытается сохранить код в будущем ...
Если вы думаете об этом на высоком уровне, то, что вы предлагаете в 3, прекрасно описывает то, что происходит в классе:
Каждый раз, когда свойство A изменяется, наблюдатели класса должны быть уведомлены о том, что свойство C также изменилось (потому что оно изменилось).