It appears as though the error message comes from get_member_md5 and is a false message, but may be resolved by unlocking the stats.
... SELECT TO_NUMBER (ac.c001), ac.c002, TO_DATE (ac.c003, v_date_format), ac.c004, tibd.bill_acct_id BULK COLLECT INTO v_invoice_id, v_included_flag, v_due_date_override, v_note, v_bill_acct_id FROM apex_collections ac, tinvoice_batch_detail tibd WHERE ac.collection_name = 'P1200_UPDCOLS' AND apex_collection.get_member_md5 ('P1200_UPDCOLS', ac.seq_id) <> ac.md5_original AND TO_NUMBER (ac.c001) = tibd.bill_acct_id and tibd.invoice_batch_id = :v_invoice_batch_id; ...
I strongly advise anyone working with APEX_COLLECTIONS to use an approach like this (or a WITH clause or NO_QUERY_TRANSFORMATION hint etc) to ensure that Oracle evaluates the view as it's intended and doesn't do a rewrite for you.
SELECT ac.bill_acct_id, ac.included_flag, ac.due_date_override, ac.note BULK COLLECT INTO v_bill_acct_id, v_included_flag, v_due_date_override, v_note FROM ( select to_number(c001) bill_acct_id, c002 included_flag, TO_DATE (c003, v_date_format) due_date_override, c004 note, seq_id, md5_original, collection_name from apex_collections where collection_name = 'P1200_UPDCOLS' and rownum > 0 ) ac, tinvoice_batch_detail tibd WHERE apex_collection.get_member_md5 (ac.collection_name, ac.seq_id) <> ac.md5_original and ac.bill_acct_id = tibd.bill_acct_id and tibd.invoice_batch_id = v_invoice_batch_id;