Там точно есть промежуточные проверки, но я не в курсе как в точности они работают.
Думаю, ответ кроется в части JIT-компилятора, которая конвертирует в промежуточное представление тот байт-код, который отвечает за лукап в таблицах. Эта конвертация дублирует всю семантику, заложенную в интерпретаторе (а иначе и нельзя, правда ведь?), с той разницей, что вся цепочка поиска метатаблицы непосредственно вставляется (инлайнится) в код трассы, при этом лоад из каждой таблицы сопровождается минимум 1 гардом (на тип возвращаемого значения), чтобы гарантировать корректность JIT-кода во время исполнения трассы.