I am not sure what is wrong with the logic i am using.
I came across a nice solution using LINQ.
This single statement works great & gets me the desired results.
string values = String.Join(", ", lstCatID.Items.Cast().Where(i => i.Selected).Select(i => i.Value).ToArray());
RESULT: 3,29,25