1) Adding a second quantifier changes how the repetition works. Adding a + means that the engine will not backtrack through it when trying to match the rest of the regex.
That will match "green" or "blue" optionally, but if it does match and the rest of the regex cannot match, then the entire regex will fail. For example,
var_dump(preg_match('/(green|blue)?+green/', 'green')); // int(0)
Normally the regex would match the "green" in the first part, fail to match the "green" in the second part, backtrack so that the first part does not
match (since it was optional), and successfully match the second "green". Adding the + means that as soon as it reaches the backtracking part the regex fails.
.+ works normally: there must be one or more characters. All together the regex is... well, it's unnecessarily complicated. There's three cases of input:
a) The string contains "greenX", which will match with $0=greenX and $1=green
b) Same with blueX: $0=blueX, $1=blue
c) If the string doesn't contain either then it will still be matched because of the .+
Adding the + is basically for performance so don't worry about it too much. Actually adding it is more likely to break a regex than help it because backtracking plays a significant role in how regexes are generally used.
2) Your regex only really matches against the "10:23,Added,". What's happening is that final .* is matching the rest of the line. Try removing it (and the $ with it).