Quando você executa o metacity --replace, eu esperaria que ele terminasse a sessão do Compiz para você. Assim, talvez ajudaria se você não chamasse stop_3d, mas apenas start_2d. Pode ser que você agora mate manualmente o 3D, que desencadeia uma reinicialização do Compiz, no entanto, antes que ele seja reiniciado, o 2D será iniciado, mas o 3D não está sendo executado e, portanto, não terminará corretamente (sem provocar uma reinicialização) .
Apenas um palpite, mas você nunca sabe.