Gostaria de olhar para adicionar uma coluna à tabela GroupQuoteItem, GroupQuoteItem.Priority. Essa coluna seria usada na consulta que determina o preço final. Se você tiver N descontos com a mesma prioridade mais alta, eles serão empilhados uns sobre os outros (a ordem não importa, graças à associatividade da multiplicação).
Se todos esses descontos de alta prioridade forem removidos posteriormente, os descontos de prioridade mais baixa poderão substituí-los. Isso deve ajudá-lo a configurar estruturas de desconto bastante complexas.
Espero que pelo menos lhe dê um lugar para começar.