Vorsichtshalber vielleicht auch gleich auf "reference" anwenden, da auch die Artikelnummer ggf. Umlaute enthalten kann, also:
$products_array[$i] = array(
'type' => (($type == 'virtual') ? 'digital' : 'physical'),
'reference' => encode_utf8((($products['model'] != '' && mb_strlen($products['model'], $_SESSION['language_charset']) <= 64) ? $products['model'] : (int)$products['id']), $_SESSIONlanguage_charset, true),
'name' => encode_utf8(strip_tags($products['name']), $_SESSIONlanguage_charset, true),
'quantity' => $products['qty'],
'unit_price' => $this->format_amount($amount),
'tax_rate' => $this->format_amount($products['tax']),
'total_amount' => $this->format_amount($amount * $products['qty']),
'total_tax_amount' => $this->format_amount($xtPrice->xtcGetTax(($amount * $products['qty']), $products['tax'])),
);