En PostgreSQL no puede usar expresiones con un alias en orden por. Solo los alias simples funcionan allí. Su consulta debería verse así:
select distinct
l2.*,
l.user_id as l_user_id,
l.geopoint_id as l_geopoint_id
from locations l
left join locations l2 on l.geopoint_id = l2.geopoint_id
where l.user_id = 8
order by l2.geopoint_id, l.user_id = l2.user_id desc;
Supongo que te refieres a que l2.user_id=l.user_id
debería ir primero.
Este es un mensaje relevante en la lista de correo general de PostgreSQL. Lo siguiente está en la documentación de ORDER BY
cláusula:
Cada expresión puede ser el nombre o el número ordinal de una columna de salida (elemento de lista SELECCIONAR), o puede ser una expresión arbitraria formada a partir de columna de entrada valores .
Así que no hay alias cuando se usa la expresión.