For some reason in some cases elog messages are internally overwritten by messages from other packages. The result is that instead of seeing one message from each package A and B one gets two identical messages from either A or B (haven't verified it, but it seems as the first package with a message wins). It doesn't happen always, but I haven't been able to see a pattern so far. This may or may not apply to 2.1 as well.
Another thing that is probably related, or even the same bug, is that messages get dispatched multiple times without overwriting others, e.g. the current testcase "emerge rsync hal" consistently dispatches the rsync postinst message twice. Some debugging shows that it's somehow caused by elog/messages.py:_msgbuffer carrying the message around, though I haven't been able yet to determine where the message gets inserted into the buffer (as _elog_base isn't called in the testcase).
ok, looks like it "just" needed "global" keywords added in some functions, at least that got rid of the repetition issue. Not sure about the overwriting issue as that's not reproducible (I've only observed it once so far, but it may have happened more often without me noticing it)
This is supposed to be fixed in portage-2.2_pre5 or earlier.