The jenkins ItemListener does not fire events when user updates project labels. I would expect the onUpdated event to fire.
Steps to repro:
1. create a new project
2. select 'Restrict where this project can be run' box and add a label that matches a slave the save the project.
3. now configure the same project and change the label to match a different slave then save the project.
Note1 - No events are fired.
Note2 - If on step #3, you un-select the option 'Restrict where this project can be run' (thereby removing the label) then save an event does get called.
It really doesn't look like this should be possible without exceptions being thrown:
https://github.com/jenkinsci/jenkins/blob/jenkins-1.565.3/core/src/main/java/hudson/model/Job.java#L1157
https://github.com/jenkinsci/jenkins/blob/jenkins-1.565.3/core/src/main/java/hudson/model/AbstractProject.java#L1820
Could you debug into the code to see what's going on?