¿podría ser debido a MINUTE?
No conozco esa función, pero todo indica que pillará los minutos sin tener en cuenta la hora ¿no?
Una opción podría ser multiplicar la hora por 60 y sumar los minutos en el sql de esa forma tenemos un número integer que represente la hora y minutos:
veremos si me explico.... (todo igual excepto el where)
Código SQL
[-]
SELECT clave, fecha, hora,
(SELECT SUM(valor)
FROM tabla AS p
WHERE (
(HOUR(p.hora) *60) + MINUTE(p.hora)
between (HOUR(origen.hora) *60) + MINUTE(origen.hora)
and (HOUR(origen.hora) *60) + MINUTE(origen.hora) + 5)
) AS pluvio
FROM tabla AS origen
Saludos y suerte