The external sort uses a "priority queue copier" to merge batches when spilling or when merging spilled batches.
The code will fail with an IndexOutOfBoundsException if any record batch is empty. The reason is a faulty assumption in generated code:
The code to get the next index returns -1 when the "position" in a record batch is zero. The -1 position translates (when truncated) into 65535 which produces the index exception.
The workaround has been to special case empty batches elsewhere in the code, apparently to avoid hitting this error.