Te ordena por lo que le has dicho que ordene, por fecha, que has puesto como alias. No deberías poner como alias el mismo nombre del campo, si estás cambiando algo: ordenas fecha con DATE_FORMAT por día mes y año, y luego llamas al resultado fecha; posteriormente ordenas por fecha y MySQL ordena por eso. Cambia el alias por fech, por ejemplo, y verás que obtendrás lo esperado.
Cita: SELECT DATE_FORMAT(fecha,'%d/%m/%Y') AS fech FROM tabla WHERE condicion ORDER BY fecha DESC