Для внутреннего понимания: strpos в РНР - это тупая обертка над С-функцией, принимающей в качестве аргументов два char* и выдающая в ответе количество байт, через которое второй массив байт совпал с первым.
Она знать ничего не знает ни о каких кодировках, и это хорошо, но не то, что вам нужно.
func_overload - это костыль для легаси-кода, в котором люди, не думающие о будущем, обрабатывают строки так, как будто они всегда будут однобайтными. Воцарение UTF-8 нарушило эту идиллию, а переписывать тонны кода зачастую просто некому - вот и подперли проблему настройкой, которая подсовывает mb_-функции вместо архаичных.
Если вы пишете новый код и он работает со строками, а не с потоками байт - вам следует забыть об этих функциях и никогда не использовать ничего, кроме mb_*, в коде.