What if you try specifying the width of the rect in terms of time units since your x-axis is explicitly a date-time axis type as follows to rule out any inconsistencies?
from datetime import timedelta
w = timedelta(minutes=3)
Also, see this post and github in case anything related to misplacement of rect glyphs with categorical axes is at play. (Not sure if it is the case or not depending on your version of bokeh, the categorical y-axis you’re using etc.)