seems apply() should be returning the entire array.

Not sure how coupons were working before.. TransactionModel::finalizeTransactionData()
is what calls apply(). It expects the full $data but apply only returns the total or subtotal.