The information that I was missing when I posted this was that the metadata functions for properties and aggregations take another argument which can prevent invalidation (which causes a rerender of the control).
So for example, if I wanted to update the value of the "foo" property, I could prevent the re-rendering like this:
oControl.setFoo('value', true) // true will prevent invalidation, false is the default