I strongly suspect that the answer that explains this will actually be to the question "Why doesn't mycmd write the lines that would contain bold characters when I launch it these ways from Perl?".
The third case is especially indicative as Perl isn't doing any of the "problem" I/O so how can Perl be ignoring any lines? Perl isn't between mycmd and test_perl3 so the contents of test_perl3 have nothing to with Perl's I/O features nor could Perl "ignore" things and have any impact on what ends up in test_perl3.
You need to discard your theory that Perl is ignoring lines and look at the problem again. There are other test cases you can try (running mycmd vs. perl -e"system('mycmd')", for example). You should look for more information about mycmd also.