Well,
The problem is two-fold
First, the "SetDelayed" for defining G is inefficient, but this is not that important
Second, the definition for G, using "SetDelayed" generates the wrong results (but MMA does exactly what you have instructed it to do).
Considere the second option. Practically, DiscretePlot is a loop, running the x values from 0 to some value in steps of 1. For each such value (say x=1) you get (here x equals 1)
DiscreteConvolve[G[n],F[n]],n,1]
And then G[n] and F[n] need to be calculated, running a DiscreteConvolve for G[n] (here is the problem, look at the definition of G) inside the DiscreteConvolve you setup for M
Just try
Table[ DiscreteConvolve[G[n],F[n]],n,i],{i,0,5}]
and try to figure out what happens
If you use Set (= rather than := ) the result of the DiscreteConvolve returns a "function" (well, this is a Piecewise expression)
and this function is used for the definition of M
This is one of the cases where the SetDelayed should be considered carefully
yehuda