Normally in a chunk, the block meta is stored in a half-byte - two blocks' metas are packed into a single 8-bit value. However, when accessing the meta, it is pulled and (since C++ doesn't have a "4-bit integer" datatype, naturally) passed around as an unsigned 8-bit integer. Then at some point it is stored back into the chunk, where it gets re-packed into the 4 bits. So far so good, the packing code ('cChunkDef::SetNibble`) strips any extra bits away, I've just checked.

However, when doing the rotations, there may be other factors involved, such as when handling the `cBlockArea` class, that one has the block metas unpacked into 8-bits-per-value for performance reasons, and only packs those values back to chunk's 4-bit scheme when writing the area.