There error in the code is coming from includes/classes/order.php:
PHP Code:
if (isset($this->info['tax_groups'][$products_tax_description[$tax_entry_description]])) {
$this->info['tax_groups'][$tax_entry_description] += $tax_add;
} else {
$this->info['tax_groups'][$tax_entry_description] = $tax_add;
}
Specifically...
PHP Code:
if (isset($this->info['tax_groups'][$products_tax_description[$tax_entry_description]])) {
...is always returning false and therefore the tax_groups value is always going to be the tax_add of the last product. Adding += to both lines makes it work, but it would be better to have the line above returning true.