That is not the correct to fill them. The problem lies in the histogram type. (more further down).
Basically you are applying all weights to all bins! But what you want to do is to apply weight of 1 to all non-btag dependent bins, apply b-tag weights >= 1 b-tag for the >= 1 b-tag bin and so on. This might explain the discrepancy for bins other than >= 4 btags.