Bueno mi respuesta no va orientada a la duda de porque sucede los resultados, es más una respuesta a dar el formato horas y minutos... que tal obtener directamente en formato time? algo así como esto:
Código SQL
[-]
select (cast('00:00' as time) + (90*60))HORA FROM RDB$DATABASE
O de esta forma para que no muestre formatos de la configuración regional
Código SQL
[-]
select cast((cast('00:00' as time) + (90*60)) as varchar(13))HORA FROM RDB$DATABASE