Why do you assign fCheckPOW here? I know that works, but I would set it to false and use fCheckPOW in the following if-clause.
So we have fCheckPOW for calling CheckProofOfWork(), which writes it's result to fHasPOW.