Issuing an lvremove command could end up with a failure to remove a logical volume. This failure is caused by processing asynchronous udev event that keeps the volume opened while lvremove command tries to remove it. These asynchronous events are triggered when the 'watch' udev rule is applied (it's set for device-mapper/LVM2 devices when using the 'udisks' package that installs /lib/udev/rules.d/80-udisks.rules).
To fix this issue, the number of device open calls in read-write mode has been minimized and we use read-only mode internally if possible (the event is generated on closing a device that has the 'watch' rule set and is closed after a read-write open).
Although this fixes a problem when opening a device internally within the command execution, the failure could still occur if using several commands quickly in a sequence where each one opens a device for read-write and then closes it immediately (e.g. in a script). In this case, a user is advised to use 'udevadm settle' command in between.