Your edit1_Callback sets handles.edit1 to a numeric value and then uses guidata() to update the master copy of the handles structure. After that point, handles.edit1 no longer refers to a uicontrol as it did before that point. This is a bad design: if you have happened to run edit1_Callback then handles.edit1 is numeric, but if you have not happened to run edit1_Callback then handles.edit1 is the handle of the uicontrol 'style', 'edit' that was put in place automatically when the GUI was loaded.
Likewise for edit1_Callback and handles.edit2 : if you did not happen to run edit2_Callback then handles.edit2 is still the handle of the uicontrol.
When you get to pusbutton1_Callback, your code assumes that both handles.edit1 and handles.edit2 have been overwritten with numeric values already. When that does not happen to be the case, you will see exactly the message you see now, about + not being a valid operation for uicontrol .
I recommend against overwriting handles.edit1 and handles.edit2 -- at the very least it is going to confuse the people reading the code.
What you can do is after validating the input is you can update the String property with the "clean" number, and then in the pushbutton you can str2double() the respective string properties and add those.
Or after validating the input you can update the UserData property of the uicontrol with the numeric value, and then in the pushbutton you can fetch the UserData property, substitute 0 if it is empty, and then add the values.