El problema parece estar en el _id está utilizando para $ grupo. Debes agrupar por $day en lugar de null , si desea agrupar los resultados por día. Prueba esto:
PriceHourly.aggregate([
{ $match: { date: { $gt: start, $lt: end } } },
{ $group: { _id: "$day", price: { $avg: '$price' } } }
], function(err, results){
console.log(results);
});
Dicho esto, no necesita almacenar el día y la hora como elementos separados en el documento. Son datos redundantes. Puedes extraer el day y hour desde date en la consulta de agregación mediante Date Aggregation
operadores.