Почему правильно сравниваются СТРОКИ даты?
насколько я знаю строки сравниваются посимвольно (char коды). и тут чар-код "1" будет меньше чем "2".

до первого вхождения. как только удается определить какая строка меньше - дальше проверка не производится. в вашем случае она останавливается на последнем символе дня.
Я бы сравнивал даты вот так: 

$date1 = strtotime('2021-02-21 22:04:47');
$date2 = strtotime('2021-02-23 14:15:50'); 

var_dump($date1 < $date2);
var_dump($date1 == $date2);
var_dump($date1 > $date2);

вы можете сравнивать так как вы сейчас сравниваете строки, но у вас могут быть всплыть проблемы если у дат будет разный формат