Your echo command produces the following output, with invisible characters made explicit:
A<SP>B<SP>C<SP>D<SP>E<SP>F<NL> tac’s -s option instructs it to use the given character as a separator instead of newline. tac keeps the separator attached to the end of each separated record so the output above is split into A<SP>, B<SP>, C<SP>, D<SP>, E<SP>, and F<NL>, then reversed and output:
F<NL>E<SP>D<SP>C<SP>B<SP>A<SP> that is to say
F E D C B A Since the newline after F isn’t considered as a separator, it is output as-is, so F shows up on its own line. The behaviour you’re seeing is not a bug.
If you ensure the initial output contains a space instead of a newline, you get the expected result:
$ printf 'A'%s ' A B C D E F ' | tac -s' '; echo F E D C B A (with a trailing space after A).