О господи, ооп которое php заслужил.
$this->summ_coupon= $summ_coupon; // записываем сумму купона в переменную, чтобы вывесим ее во view
Lib_SmalCart::getInstance()->setCartData();// пересчитываем маленькую корзину
header('Location: /order?thanks='.$order_id);
exit;
есть предположение что вот здесь теряется ваш summ_coupon.
вы прерываете выполнение приложения, все состояния будут утрачены. Тогда как в случае с ошибкой вы не делаете прерывания выполнения приложения (exit), и, как следствие, все переменные остаются.
Скажем так, вот эти строки:
if(isset($_REQUEST["thanks"])){
//формируем сообщение
$this->message="Ваша заявка <strong>№ ".$_REQUEST["thanks"]."</strong> принята.";
$this->dislpay_form = false;// форму ввода данных больше не покзываем
}
выполняются уже другим запросом, который не знает ничего про сумму купона, которую вы пытались "сохранить" в поле класса в прошлом запросе.