Ew, don't know how I missed that. Your frame names (the global names passed to CreateFrame, not the local variable names) are so generic it's likely that even if you get everything else working, some other addon (or even the default UI) will leak globals (hopefully accidentally) with the same names, screwing up your addon or vice versa.
Code:
local frame, events = CreateFrame("Frame", "DoTrackerFrame", UIParent), {}
local name, realm = nil
local anchor = CreateFrame("Frame", "DoTrackerAnchor", UIParent)
local icons = CreateFrame("Frame", "DoTrackerIcon", anchor)
local cd = CreateFrame("Cooldown", "DoTrackerCD", icons)
It's conceivable this is already affecting you; if some other addon is creating globals with the same names (again, hopefully by accident, since this is something you should never, ever do on purpose) then the game is probably not able to save and restore the positions of your frames, just as if they had no global names at all.