Since my comment seamed to answer the question I'll expand it to an answer. The general notion is simply that when you want to manipulate an expression you can use patterns and replacement to achieve that goal. Here I simply took almost verbatim the replacement you wanted and inserted some patterns to match. The reason x___ and y___ are used is simply so the rule will work for any number of nested sum:
Sum[f[y] Sum[g[x], x], y] //. Sum[a_ Sum[b_, x___], y___] :> Sum[a b, x, y]
(* Sum[f[y]*g[x], x, y] *)
Sum[ m[d] Sum[f[y] Sum[g[x], x], y], d] //. Sum[a_ Sum[b_, x___], y___] :> Sum[a b, x, y]
(* Sum[f[y]*g[x]*m[d], x, y, d] *)
Sum[f[y] Sum[g[x], x], y] //. Sum[a_ Sum[b_, x___], y___] :> Sum[a b, x, y]Will do what you are asking, now comes the question of when you can actually do this manipulation which is not addressed. – jVincent Jan 21 at 12:50