J'envisagerais d'ajouter une colonne à la table GroupQuoteItem, GroupQuoteItem.Priority. Cette colonne serait utilisée dans la requête qui détermine le prix final. Si vous avez N remises avec la même priorité la plus élevée, elles seront empilées les unes sur les autres (l'ordre n'a pas d'importance, grâce à l'associativité de la multiplication).
Si toutes ces remises hautement prioritaires sont supprimées ultérieurement, des remises moins prioritaires peuvent les remplacer. Cela devrait vous aider à mettre en place des structures de remise assez complexes.
J'espère que cela vous donne au moins un point de départ.