CommonsCF.Data messageHolder = new CommonsCF.Data();
messageHolder = k.tmp;
messageHolder.To = "!";
I have cut your code down to show the important lines.
messageHolder is a reference to a CommonsCF.Data class instance, so id k.tmp.
When you assign k.tmp to messageHolder, it does not copy the content - it copies the reference. So when you modify messageHolder, you are also modifying k.tmp as they are both referring to the same instance.
It's a bit like a mobile, you can take the SIM out of yours and put it in a new phone - the number moves with the SIM so the new phone rings when you call the old number.