Je peux confirmer qu'il s'agit bien d'un bogue. La description rapide de ce qui ne va pas est la suivante : Dans CallBaz, il y a un seul callsite qui est invoqué trois fois. Ce callsite est un InvokeMember, parce que c'est la meilleure supposition que le compilateur puisse faire étant donné la syntaxe C#, malgré le fait qu'il pourrait, en réalité, se résoudre à un GetMember suivi d'un Invoke.
Lors de la seconde exécution du callsite, c'est bien cette liaison que le runtime trouve. Il produit donc un report vers un GetMember suivi d'un invoke. Le problème est que ce report ne se limite pas correctement au cas où l'argument est de type anonyme. Par conséquent, lors de la troisième exécution, le report est activé et le GetMember tente de se lier à Program, ce qui échoue bien sûr.
Merci de l'avoir trouvé. Comme le souligne Eric, nous en sommes à un stade très avancé et il devient difficile de résoudre les problèmes avant la livraison. Mais nous voulons aussi livrer le bon produit. Je vais faire ce que je peux pour résoudre ce problème, même si je n'y parviendrai peut-être pas. Si vous trouvez autre chose, n'hésitez pas à me contacter =)
UPDATE :
Bien que je ne puisse garantir ce à quoi ressemblera la version finale de VS 2010 et de C# 4 lorsqu'elle sera livrée, je peux dire que j'ai réussi à faire passer ce correctif. La version d'aujourd'hui se comporte correctement pour votre code. Sauf catastrophe, vous verrez ce problème corrigé lors de la sortie de la version. Merci encore. Je vous dois une bière.