Factory reset and reinstall of the newest MIUI seems to have fixed it.
Edit: it's back to normal, I had it working for about 20 minutes and then it started acting up again. Here's the logcat dump:
D/alogcat ( 3061): stopping ...
D/alogcat ( 3061): starting ...
D/alogcat ( 3061): stopped
V/alogcat ( 3061): save instance
V/alogcat ( 3061): paused
D/alogcat ( 3061): stopping ...
D/alogcat ( 3061): stopped
D/dalvikvm( 214): GC_EXTERNAL_ALLOC freed 19K, 54% free 3746K/8135K, external 19011K/19040K, paused 45ms
D/dalvikvm( 214): GC_EXTERNAL_ALLOC freed 4K, 54% free 3746K/8135K, external 20482K/20493K, paused 45ms
D/dalvikvm( 214): GC_EXTERNAL_ALLOC freed 6K, 54% free 3746K/8135K, external 21973K/21978K, paused 35ms
V/com.miui.camera.Camera( 3004): onCreate
W/CameraService( 104): CameraService::connect X (pid 3004) rejected (existing client).
E/com.miui.camera.CameraHolder( 3004): fail to connect Camera
E/com.miui.camera.CameraHolder( 3004): java.lang.RuntimeException: Fail to connect to camera service
E/com.miui.camera.CameraHolder( 3004): at android.hardware.Camera.native_setup(Native Method)
E/com.miui.camera.CameraHolder( 3004): at android.hardware.Camera.<init>(Camera.java:258)
E/com.miui.camera.CameraHolder( 3004): at android.hardware.Camera.open(Camera.java:235)
E/com.miui.camera.CameraHolder( 3004): at com.miui.camera.CameraHolder.open(CameraHolder.java:85)
E/com.miui.camera.CameraHolder( 3004): at com.miui.camera.CameraGlobal.ensureCameraDevice(CameraGlobal.java:124)
E/com.miui.camera.CameraHolder( 3004): at com.miui.camera.Camera.onCreate(Camera.java:680)
E/com.miui.camera.CameraHolder( 3004): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/com.miui.camera.CameraHolder( 3004): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1619)
E/com.miui.camera.CameraHolder( 3004): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1671)
E/com.miui.camera.CameraHolder( 3004): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
E/com.miui.camera.CameraHolder( 3004): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
E/com.miui.camera.CameraHolder( 3004): at android.os.Handler.dispatchMessage(Handler.java:99)
E/com.miui.camera.CameraHolder( 3004): at android.os.Looper.loop(Looper.java:123)
E/com.miui.camera.CameraHolder( 3004): at android.app.ActivityThread.main(ActivityThread.java:3691)
E/com.miui.camera.CameraHolder( 3004): at java.lang.reflect.Method.invokeNative(Native Method)
E/com.miui.camera.CameraHolder( 3004): at java.lang.reflect.Method.invoke(Method.java:507)
E/com.miui.camera.CameraHolder( 3004): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
E/com.miui.camera.CameraHolder( 3004): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
E/com.miui.camera.CameraHolder( 3004): at dalvik.system.NativeStart.main(Native Method)
E/com.miui.camera.Camera( 3004): can not open camera
V/com.miui.camera.Camera( 3004): onStart
V/com.miui.camera.Camera( 3004): onResume
W/CameraService( 104): CameraService::connect X (pid 3004) rejected (existing client).
E/com.miui.camera.CameraHolder( 3004): fail to connect Camera
E/com.miui.camera.CameraHolder( 3004): java.lang.RuntimeException: Fail to connect to camera service
E/com.miui.camera.CameraHolder( 3004): at android.hardware.Camera.native_setup(Native Method)
E/com.miui.camera.CameraHolder( 3004): at android.hardware.Camera.<init>(Camera.java:258)
E/com.miui.camera.CameraHolder( 3004): at android.hardware.Camera.open(Camera.java:235)
E/com.miui.camera.CameraHolder( 3004): at com.miui.camera.CameraHolder.open(CameraHolder.java:85)
E/com.miui.camera.CameraHolder( 3004): at com.miui.camera.CameraGlobal.ensureCameraDevice(CameraGlobal.java:124)
E/com.miui.camera.CameraHolder( 3004): at com.miui.camera.Camera.onResume(Camera.java:826)
E/com.miui.camera.CameraHolder( 3004): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
E/com.miui.camera.CameraHolder( 3004): at android.app.Activity.performResume(Activity.java:3832)
E/com.miui.camera.CameraHolder( 3004): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2118)
E/com.miui.camera.CameraHolder( 3004): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2143)
E/com.miui.camera.CameraHolder( 3004): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1676)
E/com.miui.camera.CameraHolder( 3004): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
E/com.miui.camera.CameraHolder( 3004): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
E/com.miui.camera.CameraHolder( 3004): at android.os.Handler.dispatchMessage(Handler.java:99)
E/com.miui.camera.CameraHolder( 3004): at android.os.Looper.loop(Looper.java:123)
E/com.miui.camera.CameraHolder( 3004): at android.app.ActivityThread.main(ActivityThread.java:3691)
E/com.miui.camera.CameraHolder( 3004): at java.lang.reflect.Method.invokeNative(Native Method)
E/com.miui.camera.CameraHolder( 3004): at java.lang.reflect.Method.invoke(Method.java:507)
E/com.miui.camera.CameraHolder( 3004): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
E/com.miui.camera.CameraHolder( 3004): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
E/com.miui.camera.CameraHolder( 3004): at dalvik.system.NativeStart.main(Native Method)
D/dalvikvm( 3004): GC_EXTERNAL_ALLOC freed 111K, 53% free 2600K/5447K, external 433K/512K, paused 46ms
I/ActivityManager( 130): Displayed com.miui.camera/.Camera: +342ms
D/dalvikvm( 214): GC_EXPLICIT freed 29K, 54% free 3749K/8135K, external 19283K/21331K, paused 64ms
V/com.miui.camera.Camera( 3004): onPause
V/com.miui.camera.Camera( 3004): stop preview
V/com.miui.camera.Camera( 3004): onStop
D/dalvikvm( 214): GC_EXTERNAL_ALLOC freed 10K, 54% free 3746K/8135K, external 18622K/19745K, paused 46ms
D/dalvikvm( 214): GC_EXTERNAL_ALLOC freed 6K, 54% free 3746K/8135K, external 21109K/21113K, paused 35ms
D/dalvikvm( 214): GC_EXTERNAL_ALLOC freed 12K, 54% free 3746K/8135K, external 21989K/21994K, paused 45ms
D/szipinf ( 2810): Initializing inflate state
D/dalvikvm( 2810): GC_EXTERNAL_ALLOC freed 193K, 52% free 2809K/5767K, external 2513K/2534K, paused 30ms
D/dalvikvm( 2810): GC_EXTERNAL_ALLOC freed 235K, 53% free 2736K/5767K, external 2400K/2426K, paused 30ms
D/dalvikvm( 2810): GC_EXTERNAL_ALLOC freed 159K, 53% free 2742K/5767K, external 2688K/2705K, paused 28ms
D/dalvikvm( 2810): GC_EXTERNAL_ALLOC freed 70K, 53% free 2735K/5767K, external 2665K/3109K, paused 27ms
D/skia ( 214): purging 197K from font cache [23 entries]
I/ActivityManager( 130): Displayed com.android.sidekick/.SideKickActivity: +999ms
D/alogcat ( 3061): stopping ...
D/alogcat ( 3061): canceling periodic saves
V/alogcat ( 3061): started
V/alogcat ( 3061): resumed
D/alogcat ( 3061): starting ...
W/IInputConnectionWrapper( 2810): showStatusIcon on inactive InputConnection
D/dalvikvm( 214): GC_EXPLICIT freed 69K, 54% free 3771K/8135K, external 17582K/19630K, paused 338ms
W/KeyCharacterMap( 3061): No keyboard for id 131074
W/KeyCharacterMap( 3061): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
D/dalvikvm( 3061): GC_CONCURRENT freed 523K, 55% free 2737K/5959K, external 818K/1330K, paused 2ms+6ms