LIKE в принципе не пригоден для указанной операции. Это чисто текстовый оператор. В частности, он безусловно применяет к обоим операндам регистронезависимый collation - в этих условиях сравнение БИНАРНЫХ строк способно давать весьма неожиданные эффекты.
Если надо работать именно с бинарными строками - всё плохо. В MySQL нет нормальных функций для работы с ними.
Для решения задачи рекомендую преобразовать бинарную строку в шестнадцатеричное представление, укоротить до 40-символьного (что соответствует 20-байтовому бинарному значению), преобразовать обратно, и сравнить.
WHERE CONV(LEFT(HEX('$entered_hash'), 40), 16, 10) = correct_hash
К тому же такое условие SARGable.
PS. В выражении
WHERE '{value1}' = '{value2}' OR '{value1}' LIKE '{value2}%'
первое условие заведомо лишнее (ведь если оно выполняется, то и второе тоже выполняется).