As noted at http://habrahabr.ru/company/pvs-studio/blog/251817/#comment_8312345:
The contents of maChangeListeners is swapped with a new empty container aListeners. Then, the [now empty] maChangeListeners is traversed to dispose its contents. Thus, here must be an error and memory leak.
aListeners should be traversed instead.
Agree with you, I thought also about simplifying this, see http://nabble.documentfoundation.org/About-tdf-90566-Theme-disposing-void-memory-leak-maChangeListeners-is-not-properly-disposed-td4146014.html
But perhaps I missed something obvious.
Fixed on master with http://cgit.freedesktop.org/libreoffice/core/commit/?id=cbbb24d0afcdbdac21d03ec4ee1455a3834afff4
For 4.4 branch, there's a patch on gerrit waiting for review: https://gerrit.libreoffice.org/#/c/15290/