Groovy method optimization to build > tokens
Yes, it can be simplified further. I divided the process into three steps and added comments and assertions to make it easier to see how it works.

// Simulate converting a CSV file into a list.
def csv = 
'''LEDES98BI V2
LINE|INVOICE_DATE|INVOICE_NUMBER|INVOICE_TOTAL
1|20150301|INV-Error_Test1|22
2|20150301|INV-Error_Test1|24
3|20150301|INV-Error_Test2|26
4|20150301|INV-Error_Test2|28'''.split(/\n/)

assert csv == [
    'LEDES98BI V2', 
    'LINE|INVOICE_DATE|INVOICE_NUMBER|INVOICE_TOTAL',
    '1|20150301|INV-Error_Test1|22',
    '2|20150301|INV-Error_Test1|24',
    '3|20150301|INV-Error_Test2|26',
    '4|20150301|INV-Error_Test2|28']

/* 
 * Ignore the first two csv lines and create a list of lists.
 * The inner lists represent the fields of each record.
 */
def invoices = csv[2..-1].collect { it.tokenize('|') }

assert invoices == [
    ['1', '20150301', 'INV-Error_Test1', '22'], 
    ['2', '20150301', 'INV-Error_Test1', '24'], 
    ['3', '20150301', 'INV-Error_Test2', '26'], 
    ['4', '20150301', 'INV-Error_Test2', '28']]

/*
 * Create a Map by grouping each record by its invoice number.
 */
invoices = invoices.groupBy { it[2] }

assert invoices == [
    'INV-Error_Test1':[
        ['1', '20150301', 'INV-Error_Test1', '22'],
        ['2', '20150301', 'INV-Error_Test1', '24']
    ], 
    'INV-Error_Test2':[
        ['3', '20150301', 'INV-Error_Test2', '26'],
        ['4', '20150301', 'INV-Error_Test2', '28']
    ]
]


Here's the same program in a condensed form to give you an idea of just how concisely this can be done:

'''LEDES98BI V2
LINE|INVOICE_DATE|INVOICE_NUMBER|INVOICE_TOTAL
1|20150301|INV-Error_Test1|22
2|20150301|INV-Error_Test1|24
3|20150301|INV-Error_Test2|26
4|20150301|INV-Error_Test2|28'''
    .split(/\n/)[2..-1]
    .collect { it.tokenize('|') }
    .groupBy { it[2] }