Probably a bit late, but I did find a workaround for this, (as it would prevent me from even trying this as a way to update laptops in tablets in my enviornment)
All it takes is Autoit and a UDF(User Defined Functions) you can download from them.
I wrote a small helper app that will just watch for HPQSmbios.exe (an exe that likes to populate my whole system tray with the same icon repeatedly) and when it opens and closes, then run a function to remove all icons that don't have a valid PID attached to them.
All you would need to to stop by the autoit forums and download SysTray.au3. The peak memory after running this for 5 days is 4,008K, so the user should never know it's running (you need to start it up when the user logs in)
Here's the code:
#NoTrayIcon
#include <SysTray.au3>
#include <Process.au3>
;This will watch for the HP Client Manager and kill off dead windows it creates
ProcessWait('AeXAgent.exe')
kill_dead_icons()
while 1
ProcessWait('HPQSmbios.exe')
ProcessWaitClose('HPQSmbios.exe')
kill_dead_icons()
WEnd
func kill_dead_icons()
$count = _SysTrayIconCount()
ConsoleWrite("Count visible tray: " & $count & @CRLF)
For $i = $count - 1 To 0 Step -1
$handle = _SysTrayIconHandle($i)
$visible = _SysTrayIconVisible($i)
$pid = WinGetProcess($handle)
$name = _ProcessGetName($pid)
$title = WinGetTitle($handle)
$tooltip = _SysTrayIconTooltip($i)
ConsoleWrite("index: " & $i & @TAB & "visible: " & $visible & @TAB & "handle: " & $handle & @TAB & "pid: " & $pid & @TAB & "proc: " & $name & @TAB & @TAB & "title: '" & $title & "'" & @TAB & @TAB & "tooltip: " & $tooltip & @CRLF)
If $pid = -1 Then _SysTrayIconRemove($i) ; Remove dead icons
If $title == 'HPCMAlert' Then _SysTrayIconHide($i,1,1) ;Hide HP Client Manager since it can't hide itself...
Next
EndFunc