What's a better way to decrease cardinality when serializing records
You can use XElement.
It is especially useful when constructing XML.

using namespace System.Xml.Linq
Add-Type -AssemblyName System.Xml.Linq

Get-Data | Group-Object Invoice | ForEach-Object {

    $items = $_.Group | ForEach-Object {
        [XElement]::new('Item', @(
            [XElement]::new('Line', $_.Line)
            [XElement]::new('Description', $_.Description)
            [XElement]::new('Price', $_.Price)))
    }

    $xml = [XElement]::new('I', @(
        [XElement]::new("Invoice", $_.Name)
        [XElement]::new("Date", $_.Group[0].Date)
        [XElement]::new('Items', $items)
    )).ToString()

    $xml
}