I would like to confirm that there is indeed no appropriate event. As Petr Krebs mentioned you could workaround this limitation by hooking into the display contents view (ESRI.ArcGIS.ArcMapUI.IMxDocument.ContentsView) window procedure, intercepting mouse and keyboard messages and tracking if the selection changed.
Back in 2004 Kirk Kuykendall already suggested a possible solution process in the ArcGIS Desktop Discussion Forums:
The only way I know of doing this is to subclass IContentsView.hWnd
and trap the WM_RBUTTONUP message.
I think the layer gets selected in the WM_MOUSEDOWN event, so by the
time you get a mouseup IMxDocument.SelectedItem should already be set
to whatever the user has clicked on.
I tried that using ArcObjects SDK for .NET v10 for ArcMap 10.1 but it seems that a layer doesn't get selected in the WM_LBUTTONDOWN event. Thats true for WM_RBUTTONDOWN and even for WM_RBUTTONUP or WM_LBUTTONUP. Also if you are using the subclassing approach it seems that some of the mouse events are eaten up by the SysTreeView32 component which displays the TOC contents.
Digging a bit deeper using Spy++ I came up with the idea to hook in to the SysTreeView32 component directly and listening for the Tree View Notification TVN_SELCHANGED:
This approach is working for me very well. I put together an example and put it up on Bitbucket: