Extracted from #10427 (comment)
kv.next() and kv.prev() attempt to find the next key in a batch to seek to. However, they don't skip NoopRequests (whose keys are empty) so it ends up iterating through all range descriptors in order.
This is the second recent issue where NoopRequests and their dummy keys are processed as if they were real (#10470), so we should probably audit all the places where we iterate over the requests of a batch to ensure NoopRequests are being handled correctly.