well, in my example, I had one row per block (8k block, over 4000 bytes for a row, one row per block)
you have more than one row per block, you are probably MIGRATING rows after the second update (that would happen if you update a random column - doesn't matter the position)
Let me just flip flop your results and I can show that updating the last column generates less undo :) (but only when the update to the last column does not migrate the row!!)
ops$tkyte%ORA10GR2> create table t10 (id1 number(10), big_vc varchar2(4000), id2 number(10));
Table created.
ops$tkyte%ORA10GR2> insert into t10 select 1, rpad('*',2000,'*') , 2 from all_objects;
49834 rows created.
ops$tkyte%ORA10GR2> commit;
Commit complete.
ops$tkyte%ORA10GR2> exec dbms_stats.gather_table_stats(user,'T10');
PL/SQL procedure successfully completed.
ops$tkyte%ORA10GR2> update t10 set id2 = 9999999999;
49834 rows updated.
ops$tkyte%ORA10GR2> select used_ublk from v$transaction ;
USED_UBLK
----------
992
ops$tkyte%ORA10GR2> commit;
Commit complete.
ops$tkyte%ORA10GR2> update t10 set id1 = 9999999999;
49834 rows updated.
ops$tkyte%ORA10GR2> select used_ublk from v$transaction ;
USED_UBLK
----------
1042