But if your BarPeriod is 60, your default BarOffset is 0, which means your bars start at the beginning of any given hour. Unless you're changing BarOffset or using NumSampleCycles , I'm not sure how you are getting any other behavior.
Quote
BarOffset
Bar start/end time offset in minutes; 0 or a positive number smaller than BarPeriod. Bars and frames normally start at a date/time boundary; f.i. 60-minute bars start at every full hour, and daily bars normally start at UTC midnight. This can be changed with BarOffset. For daily bars, BarOffset can be used to shift the bar begin to a certain number of hours and minutes after midnight. This is normally used to trade at a certain time using daily bars. BarOffset is also automatically set up by NumSampleCycles by dividing a bar into equal time intervals and decreasing the offset by one interval per cycle; on the last cycle, BarOffset is 0. By default, BarOffset is 940 with daily bars, and 0 on any smaller bar period.

What time are your run() functions occurring? Maybe record the time in a log.