On my Moteino M0 with the RFM69HCW, I noticed that when I called the setPowerLevel() function, the power shown on my spectrum analyzer went down 1 dB even if I set the power to 31. I dug into it and noticed this line in the code:
if (_isRFM69HW) _powerLevel /= 2;
which converts 0-31 to 0-15.
However, the datasheet says only the upper 16 values are valid. So we should be writing 16-31 in that field instead of 0-15. It just so happens that they work, but writing 0 to bit 5 seems to reduce the power level by about 1dB. Here are some real-world measurements for different values of OutputPower:
31: 16.35 dBm
30: 15.74
29: 15.05
28: 14.35
26: 12.603
21: 7.8
18: 4.71
17: 3.46
16: 2.46
15: 15.125
14: 14.71
13: 14.10
10: 11.63
5: 7.07
2: 3.94
1: 2.77
0: 1.65
Interestingly, it seems like you can get monotonically increasing power levels if you use the sequence 0-16-1-17-2-18...etc so it might be possible to exploit this to get greater granularity in the power levels. I wonder if this is actually how it's supposed to work, but it was too confusing so the technical writer just said "screw it, I'll just tell them to use the upper 16 values!"