Отличий в поведении нет.
Обе функции возвращают false, если dog == null из-за ?: false в конце.
Функция let выполняется, только если dog != null.
То же самое со свойством eating во втором примере.
Обратите внимание, что оператор return в лямбде let означает возврат из функции isDogEating, а не из лямбда! Чтобы вернуться из лямбды, можно использовать return@let или просто выражение
Я предпочитаю более короткую версию:
fun isDogEating() = dog?.eating ?: false
Я просто добавлю, что в этом случае возврат из isDogEating не влияет на результат, а в основном случайно.
Как всегда отличный ответ, Евгений!