Не ставьте круглые скобки после say_hello, потому что вы не пытаетесь вызвать его там, а передаете его как делегат функции. Так что попробуйте:
browser.Document.InvokeScript("setTimeout", new object[] { "say_hello", 100 });
Кроме того, есть ли ошибки в консоли?
Обновление :
Попробуйте:
browser.Document.InvokeScript("setTimeout(say_hello, 100);");
Также попробуйте:
browser.Document.InvokeScript("setTimeout", new object[] { "say_hello", "100" });
Какая бы ни была проблема, возможно, где-то проглочена ошибка JavaScript. Попробуйте выписать визуализированную разметку и скрипт и запустить его на обычной веб-странице в браузере.