The 'i' in your pattern is actually not only the variable:
Sum[f_ g_, i_] := (Print[i]; (f Sum[g, i] /; FreeQ[f, i]))
As you can see, 'i' in your case is {i,n}, so if you restart the kernel and make the following definition:
Sum[f_ g_, i_] := f Sum[g, i] /; FreeQ[f, i[[1]]]
it works.
I would, however, advice you to make your own helper function:
ClearAll[MySum]
MySum[f_ g_,spec:{i_,___}] := f Sum[g, spec] /; FreeQ[f, i]
MySum[f_ ,spec___]:=Sum[f, spec]
MySum[2\[Lambda]^k x[i]^j,{i,n}]
MySum[2\[Lambda]^i x[i]^j,{i,n}]
So that it becomes much easier to edit, and you don't have to protect and unprotect each time, and restart kernel and so on, and you can still harness all the 'power' of Sum, because if it does not match it goes back to Sum...