IsActivated is called in a function (called by Excel) to notify the "com" object to initialize. Let's call it Initialize.
With "process all pending messages in the process" I mean that suddendly, IsActivated is going to run something that is like Application.ProcessMessages in Delphi. A cycle that take every single WM message in the queue of the thread to elaborate it.
Because all the COM automation is done trough WM messages this "cycle" is letting Excel to "go on" with the automation and because at the end it would be closed, it unload also the Addin. The unload is going to destroy all objects.
When the automation is ending, before excel process is being closed, the elaboration start back from where it left in the Initialize (let's say just after the IsActivated call). This is obviously undesired because at that point almost all objects has been destroyed and memory of the dll freed. And this causes AV all over the execution.
As you can see from the following peace of call stack, you are calling something that then is going to execute some code in fastprox.dll.
:6ec7e6dd ; C:\Windows\system32\wbem\fastprox.dll:5ea2c561 ; C:\Users\etomm\AppData\Local\Temp\C367EDCC1F69411388ACA31D3A556182:5ea2d65d ; C:\Users\etomm\AppData\Local\Temp\C367EDCC1F69411388ACA31D3A556182:5ea25310 ; C:\Users\etomm\AppData\Local\Temp\C367EDCC1F69411388ACA31D3A556182:5ea30bf8 C367EDCC1F69411388ACA31D3A556182.IsActivated + 0x84
Just to help you, I noticed this strange behavior just when two excel process are fired at the same time, if just one Excel process is opened the Initialize function never enter in that strange cycle.