Okay... try this.

 Code:
function IEPrint($document,optional $mode)
  dim $OLECMDID_PRINT, $OLECMDEXECOPT, $IE, $rc, $sc
  $OLECMDID_PRINT=6
  if $mode
    $OLECMDEXECOPT=1
  else
    $OLECMDEXECOPT=2
  endif
  if exist($document)
    $ie = createobject("internetexplorer.application")
    $ie.navigate ($document)
    While $IE.Busy and $IE.ReadyState <> 4 sleep 0.2 loop
    While $IE.Document.readystate <> "complete" Loop
    $IE.visible=0
    $sc = CreateObject("ScriptControl")
    $sc.language = "VBScript"
    $sc.timeout = 300000
    $sc.addobject('vbIE',$IE)
    $sc.addcode('vbIE.ExecWB ' + $OLECMDID_PRINT + ',' + $OLECMDEXECOPT + ',2,0')
    $sc.run
    $ie.quit
  else
    exit 2
  endif
endfunction


Last week when I initially was trying this, I was using very similar code as yours but the dialog would show up and then quickly disappear. This did not happen under vbscript. I ran out of time and never could figure out what was causing it until tonight. If the visibility setting is on the dialog box would just disappear under kix.

Then I started messing with the delay, and read that when the 3rd option is set to 2 like you have it, it is supposed to halt, but in kix it does not. However in vbscript it does, thus the code above.

Anyone have any idea why kix is handling these events differently than vbscript?