Answer to question #1:
By default, titles resulting from a filter are only listed once, with the last instance of a given title “dominantly appended” to the list (i.e., duplicates are removed). Thus, in your example, adding [[foo]] to the end of the list automatically removed the first instance of foo from the front of the list. You’ve already discovered the use of the :raw suffix for the enlist-input operator, which prevents duplicates from being removed when you enlist an existing space-separated list. Another bit of filter syntax that helps with preserving duplicates is the “=” prefix on a filter run. To get the results you expected, you would write: [[foo foo foo bar]enlist-input:raw[]] =[[foo]].
Answer to question #2:
As you noted in your followup message, you have an existing list stored in a tiddler field called fieldName. Let’s assume this field contains 4 items: foo [[bar baz]] mumble [[frotz gronk snork]] (where the 2nd and 4th items contain spaces). To add an item to that list, you would write something like this:: [<currentTiddler>get[fieldName]enlist-input:raw[]] =[<addedTitle>]. Note also that using <currentTiddler> in your filter is slightly more efficient than all[current], since the all[] operator first needs to parse the operand (current) to determine that you want to retrieve the current tiddler’s title, while <currentTiddler> directly retrieves the title without the added internal layer of parsing.
enjoy,
-e