I think you are correct regarding the script only changing the UI. This is because the dlg attribute of your ToolClass2 is always pointing to the same instance of the TestDialog UI class.
When you first run the tool, the TestDialog instance is created and your Add-in works as intended. Next time, since self.dlg is not None, your else clause just shows the ...
As per my comment, why not just use a combobox for the layer list within the AddIn itself?
Here is an example of how I have done this before in a Python AddIn:
"""Implementation for ClipAndShip_addin.combobox (ComboBox)"""
self.items = 
self.editable = True
self.enabled = True
I found a technique to do this described at Another GIS Blog under the title of Python Add-Ins and Tkinter:
ArcGIS for Desktop does not support any python GUIs out of the box,
but let's say we want to have a form pop-up anyway. ...
One way to do this is to create a wx python instance at start up,
which is create before the desktop python loop is ...