Короче магическим образом заставил IE8 работать: переименовал параметры функции и параметр в try-catch, так чтобы они не совпадали. Повторить баг не получилось, но reason не понятно когда становился undefined
function (reason) {
…
try {
…
}
catch (*!*reason*/!*) {
…
}
…
}
вторая причина тут
Асинхронный вызов функций