Have just spent some minutes debugging it, and I believe I now understand what's causing the issue. Can't fix it right now due to limited bandwidth to develop, but the below is a short explanation of the problem (and also a note to myself in the future, when working on this issue again).
The issue appears to be that when we put the elements on the UI, we also intentionally call the update method on the server side, to get the right values. Then once everything is loaded, there is a JS call to refresh the elements' values.
The ideal approach would be to have Jelly creating the elements, then using JS to start the execution. But that's not easy to implement without breaking other things.