You are correct, the duty cycle is with respect to the duration of one beat (not with respect to the duration of one bar). If you want a gate whose duty cycle is with respect to the entire bar, try this:
(!On barBPM: !BPM beats: !Beats dutyCycle: 0.5) turnOnAfter: 0 s for: !BPM bpm s * !Beats * !DutyCycle