From what I understand, printWhen expressions are always evaluated NOW, and cannot be changed. In my case, my printWhen expression was based off the first row of my data, and didn't consider the rest of it. The only workaround I could find was to compute my totals in SQL and stop relying on Jasper to make decisions whenever possible.