One simple solution is to precompute the monthly average (or median, max, or min depending on how you define the "hottest month") and keep it as an additional column. That's not perfectly efficient, since you have an entire column for a few repeated values, but that shouldn't really matter in practice.
# generate random data
expand_grid(month = as.factor(1:12),
day = 1:30) %>%
add_column(temp = seq(.5,2,length.out=30*12)*rnorm(30*12, 15, 10)) %>%
#now get the monthly statistic
mutate(monthly_temp = mean(temp)) %>%
# and plot
geom_boxplot(aes(x = month, y = temp, fill = monthly_temp)) +
scale_fill_gradient2(midpoint = 20)
A more "elegant" solution could be as shown in
?geom_boxplot to use
stat = "identity" and then recompute every statistic of the boxplot (ymin, lower, etc) yourself, I wouldn't recommend that approach in practice.