I think the biggest contributor to this has been that the netty-all dependency bundles up all of the netty code (including epoll), where the driver only depends on netty-handler, so multiple versions of netty can show up on the classpath if a user also depends on netty-all (either directly or via some other dependency). Because of this, the epoll code loads, but it doesn't interoperate with the netty code used by the driver.
I describe this in so am closing this as a duplicate, but please reopen if I may have misinterpreted.