Al usar una SELECT para calcular el dato, el motor pasa.
Encapsula todo en una SELECT y prueba.
Código SQL
[-]SELECT A.*
FROM
(
SELECT DISTINCT A.Codigo, A.Nombre, COALESCE(RDB$GET_CONTEXT('USER_TRANSACTION', 'MUNICIPIO'), 1) Municipio, C.Nombre NomMunicipio,
(SELECT SUM(Votos) FROM Resultados WHERE CodPrv = A.CodPrv AND Partido = A.Codigo AND Proceso = B.Proceso
AND Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv AND Municipio = COALESCE(RDB$GET_CONTEXT('USER_TRANSACTION', 'MUNICIPIO'), 1))) VotPar,
RDB$SET_CONTEXT('USER_TRANSACTION', 'MUNICIPIO', (SELECT FIRST 1 Municipio FROM Mesas WHERE CodPrv = B.CodPrv AND Codigo = B.Mesa ORDER BY Municipio))
FROM Partidos A
LEFT JOIN Resultados B ON A.CodPrv = B.CodPrv AND A.Codigo = B.Partido AND B.Proceso = :Proceso
LEFT JOIN Poblacion C ON A.CodPrv = C.CodPrv AND COALESCE(RDB$GET_CONTEXT('USER_TRANSACTION', 'MUNICIPIO'), 1) = C.Codigo
WHERE A.CodPrv = :PrvIns AND A.Codigo > 0
AND EXISTS (SELECT Municipio FROM Mesas WHERE CodPrv = B.CodPrv AND Codigo = B.Mesa)
) A
ORDER BY 4, 5 DESC, 2
Por otro lado, haces unas SELECT totalmente anárquicas, que me parece que penalizan totalmente el rendimiento.
Saludos