When I change the [value] of a select2 with the "multiple" attribute turned on, options in the new value that were not previously selected become selected, but all options that were previously selected also remain selected -- so my selection is the union of the old values and the new values, rather than just being the new values.
This also means that if I pass an empty array to [value], nothing changes, whereas I would expect all options to be un-selected.
I believe the issue is in setElementValue(), the innermost if needs an else to turn the selected property off when the option is not contained in the new value, like so:
if (newValue.indexOf(option.value) > -1) {
this.renderer.setElementProperty(option, 'selected', 'true');
} else {
this.renderer.setElementProperty(option, 'selected', null);
}