вообще не понимаю такой разницы в API разных типов делегатов... у обычного делегата есть всё нужное, а у динамических нифига...
Разница в api существует из-за того, что dynamic delegate сериализуем, и в рантайме он хранит условный указатель не метод. А статический делегат не сериализовать, и он может себе позволить использовать некоторое подобие std::bind внутри, отсюда и возможность давать payload произвольных типов.