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.