BTW, this is really so weird that I would like somebody else to check and try.
AFAIK, the critical moment is when 'outer' select loop has more rows than can be prefetched in single step. In that case, @@IDENTITY (and SCOPE_IDENTITY) does not work until the last prefetch is performed.
That OTOH means that unless you do inserts in large fetch loop, the bug is hidden.
Of course, still possible something is wrong in OleDB.