Okay, ich hab's gelöst.
Anstatt die Unterabfrage mit WHERE ... IN zu benutzen, habe ich sie jetzt einfach als Tabelle benutzt und gejoint:
SELECT meta_work.id, meta_work.title, meta_gallery.title AS headline
FROM meta_work
NATURAL JOIN (
(
SELECT MAX(id) AS id
FROM meta_work
WHERE (gallery = 5 AND id < 87) OR gallery < 5
) UNION ALL
(
SELECT MIN(id)
FROM meta_work
WHERE (gallery = 5 AND id > 87) OR gallery > 5
)
) AS selection
LEFT JOIN meta_gallery ON gallery = meta_gallery.id
(Ich habe sowohl die äußere, als auch die Unterabfrage inzwischen geändert, die Semantik ist aber dieselbe. Und das Problem war es auch ...)
Ich frage mich allerdings weiterhin, warum MySQL diese Kombination aus WHERE ... IN und Unterabfarge mit UNION offenbar nicht mag.