Yeesh. I just got bit on this same bug, but from a different direction.
Calling BytesWritable.getBytes() returns a reference to the BytesWritable's internal byte array. I was calling that, and then using that byte array in subsequent processing. Problem is that the BytesWritable was also still holding onto a copy of that array, and later modifying it - thus modifying my copy as well. This was a really subtle bug that was hard to find, and I wasted a lot of time on it.
I realize there's a need to get access to a BytesWriteable's internal byte storage without performing an array copy. But again, I think there needs to be some additional safe method to retrieve a byte array that's a copy of a ByteWriteable's contents. There's just too many potential pitfalls for developers if the situation is just left as is.