Ни один из них не лучше в том смысле, что один из них будет работать лучше, чем другой. (Любая разница будет незначительной.)
Некоторые соглашения о кодировании предполагают, что вы используете один оператор return для каждой функции, чтобы было легко понять, как он работает. Это не жесткое и быстрое правило, и в этом случае довольно очевидно, что происходит. Если вам не нравится это предложение, но вы хотите, чтобы ваш код легко читался другими, я бы предложил следующее:
if (readOnlyFields.Contains(propertyName)) return false;
else return base.CanWriteProperty(propertyName);
Но у тебя тоже все хорошо.