Because it tries to compare modification times of the directories, seeing if the "after" modification time has changed from the "before" time. But the resolution of those modification times is system dependent; it's common for the resolution to be 1 second or worse. So it's possible for two distinct stat() calls to return the same modification time, even if the kernel has reported the directory to have changed and new files have been written. In that case, we miss the notification.