You could use the Alpha channel and create onenter/onleave functions for the frame.
eg
Code:
BuffFrame:SetScript("OnEnter",
function(self, motion)
self:SetAlpha(1)
end)
BuffFrame:SetScript("OnLeave",
function(self, motion)
self:SetAlpha(0.5)
end)
If you mouseover a Buff icon, you aren't mouseovering the BuffFrame anymore and the OnLeave function will be triggered.
So advanced checks are required (incombat, timer etc)
You could also use a hook for the buff's onenter/onleave function.