Acho que você só quer definir as horas para 5, para ser consistente com o seu intervalo. Se sim, você pode fazer isso:
SELECT cast(date(stamp) as datetime) + interval 5 hour
Sum(value)
FROM table
WHERE stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day)
AND stamp < '2013-01-01 05:00:00'
GROUP BY Date(stamp)
Mas, acho que você pode realmente querer expressar isso de maneira um pouco diferente:
SELECT cast(date(stamp - interval 5 hour) as datetime) + interval 5 hour
Sum(value)
FROM table
WHERE stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day)
AND stamp < '2013-01-01 05:00:00'
GROUP BY Date(stamp - interval 5 hour)
Isso realmente realinha as datas no limite de 5 horas.
Observação:essas consultas não foram testadas, portanto, podem conter erros de sintaxe.
Isso está assumindo que o timestamp é realmente um datetime. Se for um carimbo de data/hora do UNIX, você precisa convertê-lo primeiro.