Как видно, купон перекрывает остальные скидки, а нужно чтобы результирующей была большая скидка. Т.е. логика должна быть такова: имеется купон, скидка N % . Пробегаемся по товарам, если товар имеет скидку (неважно какова её природа - будь то скидка собственная или правило работы с корзиной) < N или скидки не имеет, то заменяет скидку на N , в противном случае товар не трогаем.