Assuming that you don't care about the order in which the output appears, I think that the following does what you want:
SumPartitions:= proc(S::{set, list})
local p, J:= Iterator:-SetPartitions(nops(S)), `&<`:= curry;
{seq}((sort @ add~ @ map&<(map2,index,S) @ [op]~ @ J:-ToSets)(p), p= J)
end proc
:
#Examples of usage:
SumPartitions([a,b,c,d]);
{[a + b + c + d], [a, b + c + d], [b, a + c + d], [c, a + b + d],
[d, a + b + c], [a + b, c + d], [a + c, b + d], [a + d, b + c],
[a, b, c + d], [a, c, b + d], [a, d, b + c], [b, c, a + d],
[b, d, a + c], [c, d, a + b], [a, b, c, d]}
SumPartitions([a,a,b,c]); #Joe's multiset example
{[2 a + b + c], [a, a + b + c], [b, 2 a + c], [c, 2 a + b],
[2 a, b + c], [a + b, a + c], [a, a, b + c], [a, b, a + c],
[a, c, a + b], [b, c, 2 a], [a, a, b, c]}
SumPartitions([a,b,c]);
{[a + b + c], [a, b + c], [b, a + c], [c, a + b], [a, b, c]}