Thank you! That did indeed solve the issue. And I understand better what is going on. I was hoping that valueAtTime would sample the expression-result value at the marker time, but based on your example, it will always sample the keyframed value, which in this case is just the value. So instead we take the current value and add to it the known grow amount from all the previous markers. Great!
Theoretical addendum: if we were growing by a random amount instead of a fixed amount, would there still be a way to track this?