I think that you have overlooked one detail in the output. BothYou're absolutely right of course, not a kernel bug, just dimwittedness on my part. Turning off window scaling does seem to be an effective workaround.
systems have declared window scaling of 2, so when otter sets the
window size of 1984 in the packet it is actually advertising a window
of 7936, which you are not exceeding. You do not say what type of
system otter is (or what OS it is running), so one explanation is that
otter has just mirrored your 'wscale 2' in its SYN-ACK without
actually meaning it.