I haven't had time to go through and find the problem. However I have a suggestion.
If you multiply an int against a fixed point value then the result is a fixed point value (32.0 * 24.8 = 24.8 ). You are converting "power" to fixed point to multiply it against a fixed point value, so you have to shift back after the fixed point mult. Just multiply power as a regular int against what you want to scale, and you don't have to right shift afterward, and you will have an extra 8 bits of range to work with.
The primary problem you will run into with fixed point math is overflow. I'll let you know if I see anything else.
Dan East