Its hard to tell from that code, but there's a few things to know about CompositeControls.
First: Don't create your child controls in the constructor. Do it in the CreateChildControls method (override it).
Anytime you need to get the values or state of child controls, make sure you call EnsureChildControls first.
Then, anytime you do anything with your control that should require controls to be recreated, make sure to do a ChildControlsCreated = false; Do note that you will lose the state of your child controls though when that happens, but there's no choice.
Now, here is where your issue could occure: If you are creating controls in the constructor or some other event of the composite control, they will not be created correctly, and sometimes, ViewState will not be reloaded properly. If that happens, when you save, events won't be fired, values won't be correct, and so on.
Another possibility if you are not creating your controls properly, is that you'll actually end with TWO sets of textbox. So the text property will be set on the wrong one, and all hell breaks lose.
Before we continue the diagnostic, can you confirm that you're doing the stuff I just talked about properly, to eliminate that as a source of problems?