Мы просто ввели параметр, позволяющий отключать округление в PriceDisc::amount2Price()
И взводим его при вызове amount2Price() из метода PriceDisc:

rice2Amount()
Описанные вами проблемы ушли автоматически.
Т.е. стандартная аксапта при обработке по немедленному получению для расчета сумм, сперва считает промежуточную цену и зачем то её округляет, а затем на основе округленной цены считает сумму. Из-за этого и ошибки. Мы убрали промежуточное округление и ошибки исчезли.
По-моему это просто косяк был. Мы сперва не решались описанные исправления вносить. Потом сделали и живем, не зная горя, уже несколько лет. Все работает без проблем.