The difference is that at one point in time, Perl fork() (different from C fork()) did not flush the handles, and any output sent after fork() may be flushed from both parent and child resulting in double output. system() never had this behaviour because system() was not implemented in terms of Perl fork() and Perl exec().
My real question to you is: What sort of buffering problem do you see $| = 1 solving for system() calls? I say none, and suspect you are referring to the earlier problems with Perl fork(). What say you?