Although not applicable here since you found an event that works.... this is an alternative solution you could use when its necessary to defer an update:
Lua Code:
local function doSomething()
-- do something
end
local f = CreateFrame("Frame")
f:RegisterEvent("SOME_EVENT")
f:HookScript("OnEvent", function()
C_Timer.After(0, doSomething) -- wait until the next frame to do something
end)