There's no perfect answer
This is the most accurate phrase yet.

I can't remember, does the SysVar reactor catch changes in the CmdActive sysvar?
I'd have to experiment myself, now that you mention it.
Another alternative could be to count the number of objects inside the drawing at open, and then save the difference at Save. That way you can see how much extra work / erases were made.
There's no perfect answer, especially since any user could have multiple DWGs open at the same time. But it's near impossible to work on more than 1 at any one instant. Also what about those using RefEdit? They're inside one DWG, but actually modifying another.
Giving this a bit more thought, perhaps to simplify the who-dun-it concept _and_ to provide clear identification of what modifications have been made, a programmatic file copy at Save would prove useful. Then modify the dialog to present the user with the log list, and upon selection (or checkbox, etc.) the associated drawing (the one logged to that event/date/user) is programmatically referenced into the active drawing for 'review'.
While I do not keep track of who-dun-what, I do keep what I term 'void' copies of our drawings, which are made via LISP routine using a command (aptly named c:VOID ) to programmatically copy the drawing to a predetermined folder within our project's directory structure, adding the date to the file name. This can then be referenced to easily identify what changes were made, etc.
Admittedly, this can cause storage issues for those without the benefit of having massive amounts of available server space, etc.. This is just my workflow, and is certainly not perfect, nor would it apply to all. Just thought I'd share.