Tracing 'Invalid Number Error' from millions of rows using a large, complicated query
Your suspect #2 cannot be true because null values do not cause ORA-01722.

Q1: You might try

Decode (Translate (AlphanumericColumn, 'x0123456789', 'x'),
  Null, To_Number (AlphanumericColumn),
  SomeIdentifyingNumericReplacementValueForNonNumericContent
)


on all the alphanumeric columns whereever any one is used as a numeric value and later scan for the identifying numeric replacement value, which might even be null if still identifying, in the output to spot the offending rows.

Q2: It might be that the offending conversion occurs outside the error handling block, particularly in one of the initializers in the declare part before the begin or in another exception handler immediately before your When Others.
If true, you should wrap the existing code into another inner declare-begin-end block while keeping your exception handler at the outermost level.