I've opened a Service Request about this to Oracle and they've provided me a solution. I should not be using NULL, but should be using the FND_USER_PKG variables instead (fnd_user_pkg.null_number, fnd_user_pkg.null_char, fnd_user_pkg.null_date).
set serveroutput on; declare cursor c1 is select * from xx_dup_emp_records where status = 'ReAssigned'; begin for c_1 in c1 loop FND_USER_PKG.UPDATEUSER (x_user_name => C_1.USER_NAME_1, x_owner => null, x_end_date => trunc(sysdate), x_employee_id => fnd_user_pkg.null_number, x_customer_id => fnd_user_pkg.null_number, x_email_address => fnd_user_pkg.null_char); end loop; end;
Turns out, when passing NULL to the parameters, it is skips the parameter.
Hope this helps someone.