Если во втором питоне строку явно объявить как UTF-8, то там длинна будет тоже правильно (через len()) определяться (т.е. число симолов, а не байт).
В третьем строк без явноуказанной кодировки просто не существует - там такое называется байтовый массив и с ним мало что можно сделать (функционал сильно урезан по сравнению со строчным типом).
А строка с объявленной кодировкой обрабатывается по-символьно, а не по-байтно (это утверждение верно и для второго и для третьего питона).