I'm afraid that I don't understand what you are trying to accomplish. Wouldn't your predicate just be 'po_header_id = 482'? Why do you need the subquery at all?
Is it possible your query returns no rows, or multiple rows? I think either of those cases could raise an error in your predicate function evaluation.
Does this work:
lv_return_val := 'po_header_id = (select MAX(po_header_id) from po_headers_all where po_header_id = 428)';