Каким образом возникают сбои в транзакциях?
Если я ничего не путаю, то:
1) $transfer->save(false); - у вас отключена валидация при сохранении моделей.
2) При коммите вы не проверяете, что результат сохранения всех моделей положительный (true), а вить у вас тупо может не пройти валидация где-либо.
3) При тестировании вы пробовали отправить отрицательное число? Возможно стоит проверка на то, что значение число, но вот, что оно больше 0 не стоит, такое может приводить к проблемам.
Все это разумеется не решения вашей проблемы, а скорее то, на что можно обратить внимание.
if ($type == $model::DEPOSIT || $type == $model::BILLING) {
            $this->_user->$account += $amount;
        }
        else {
            $this->_user->$account -= $amount;
        }

        // Обновляем счет пользователя
        $this->_user->save(false);
Вот тут подвох. Предыдущий баланс сохраняется в переменную, затем инкремент/декремент переменной и запись нового значения.
Yii делает запрос вида
UPDATE user SET balance = $new_balance...
А вам необходимо делать запрос вида
UPDATE user SET balance = balance - $amount WHERE balance >= $amount AND user_id = 1
И смотрите, если баланс пользователя больше суммы, которую он хочет провести, то запрос вам вернет единицу, т.е. отредактирована одна запись. Тогда можно делать добавление баланса второму пользователю, иначе есть подвох и не одобряем перевод.
UPDATE user SET balance = balance + $amount WHERE user_id = 2
И затем сохраняем саму запись перечеслия в таблицу. Все это дело оборачиваем в транзакцию и счастливы.