Оба с receiver this; run — extension и может на nullable (x?.run); with — обычная функция (receiver, block), не extension.
Разбор
with(binding) { text = ... } в Activity.
?.run удобен при null.
- Возвращают результат блока.
- Выбор чаще стилистический.
Итог
run/with — receiver + результат блока; отличие в форме вызова.