RL predates the virtual library feature, and in order to 'just work', VLs are applied to searches by default.
It seems probable that adding
use_virtual_library=False to the sync search will prevent the behavior you see:
Code:
# Change action.py:1031
# from:
on_device_ids = set(db.search_getting_ids('ondevice:True'))
# to:
on_device_ids = set(db.search_getting_ids('ondevice:True', None, use_virtual_library=False))
However, you are using a feature ("replace device with list, add new items only") I not only don't use, I don't know how it's meant to work exactly and I don't have the energy right now to figure out it. (In my set-up, using 'Add/overwrite all list items to device' lists, that search result is ignored, so I don't see an issue with VL.)
Here's a test version with that change, but I haven't tested that change in detail.