Итак, вы используете физическое равенство (==) для сравнения цветов в вашей хеш-таблице. Если цвета являются структурированными значениями (я не могу сказать из этого кода), ни одно из них не будет физически равным друг другу. Если все цвета являются разными объектами, все они попадут в таблицу, которая может быть довольно большим количеством объектов. С другой стороны, хеш-функция будет основана на фактических значениях цвета R, G, B, поэтому вполне может быть большое количество дубликатов. Это будет означать, что ваши хэш-контейнеры будут иметь очень длинные цепочки. Возможно, некоторая внутренняя функция не является хвостовой рекурсивной, и поэтому переполняет стек.
Обычно длина самой длинной цепочки составляет 2 или 3, поэтому неудивительно, что эта ошибка возникает не часто.
Глядя на мою копию hashtbl.ml (OCaml 3.12.1), я не вижу ничего нерекурсивного в строке 54. Так что мое предположение может быть неверным. В строке 54 новый внутренний массив выделяется для хэш-таблицы. Поэтому другая идея состоит в том, что ваша хеш-таблица становится слишком большой (возможно, из-за нежелательных дубликатов).
Одна из попыток - использовать структурное равенство (=) и посмотреть, исчезнет ли проблема.