Como você descobriu, quando a sessão está bloqueada, o Windows não responde aos eventos da ACPI. No entanto, você pode desligar a máquina via WMI e outras APIs.
Como observação, fiz alguns testes sobre como o Windows responde ao evento de desligamento da ACPI. Você pode encontrar mais aqui