Есть две проблемы. Во-первых, как указала Андомар, вы не можете ссылаться на псевдонимы столбцов в ORDER BY.
Во-вторых, если вы выполняете агрегацию (например, MAX), вы не можете выбрать поля, которых нет в GROUP BY, если они также не агрегированы.
Я думаю, это то, что вы хотите:
SELECT m.maxdate, t.*, u.*
FROM (
SELECT topic_id, MAX(messages.date) AS maxdate
FROM messages
GROUP BY topic_id
) AS m
INNER JOIN topics t ON t.id = m.topic_id
INNER JOIN users u ON t.user_id = u.id
WHERE t.forum_id = " . $forumid . "
ORDER BY m.maxdate DESC