Você realmente tem dois tipos em um em sua última consulta. Os pais podem classificar em ordem crescente ou decrescente, mas os filhos só podem classificar em ordem crescente.
Depois de olhar para isso, acredito que você pode obter uma solução com algo assim.
order by case
when depth = 0
then path
/*
secret function that always returns the
right numbers regardless of whether or not the sort is ascending.
*/
else XXX_function('DESC', path)
end desc;
Acredito que a lógica esteja correta, mas você precisa descobrir como substituir os números nas classificações decrescentes, pois as coisas ficarão 'de cabeça para baixo'. (Talvez inverta as posições da matriz)