As for my scenario: in the long run I need to be able to let a single BIRD process run as many as 10000 OSPF protocol instances, each of which communicating locally over an individual TUN/TAP device. In the end, a single Linux system therefore has to be able to support 10000 TUN/TAP devices.
As for your ideas and suggestions to check: Having tap1 and tap2 on one system, I'm able to ping tap2 via tap1. Running OSPF in NBMA mode resulted in no messages received by the tap devices at all.
I updated my stackoverflow question and included also a strace()-extract of BIRD. In it you see the setup of a socket for a tap device and the inclusion of the file-descriptor for this socket into the set of descriptors observed by the selcet() system call. But unfortunately select() never notices any data ready to be read by this socket file-descriptor.
With the additional information about my scenario and the results of your ideas and suggestions, I kindly ask you to take another look at the updated question on stackoverflow.
I'm thankful for all the time you or somebody else will invest into supporting me in this matter!
Best, Cyrill