I feel the same way. I found a workaround that seems to work, although it isn't ideal.
Assuming the events will almost always have Additional Text populated, I use that to identify the system-generated log items. So I added an event handler which I applied to Events, Messages, and Warnings. When I want to manually log one of these items, I'll either not supply Additional Text, or will prefix it with a ^ (which I check for).
I've been using this approach for about a year and haven't found any instances where something is getting excluded that shouldn't, and everything I do want excluded has been.
function GeneralEvents_SuppressSystemLogging(Sender, LogParams)
if len(logparams.additionaltext) > 0 then
if aqstring.find(LogParams.additionaltext ,"^", 0, false) = -1 then
logparams.locked = true
GeneralEvents_SuppressSystemLogging = true
else
logparams.locked = false
logparams.additionaltext = aqstring.replace(logparams.additionaltext, "^", "", false)
GeneralEvents_SuppressSystemLogging = false
end if
else
logparams.locked = false
GeneralEvents_SuppressSystemLogging = false
end if
end function