Calling SqlCeConnection.Close() (or implicit through SqlCeConnection.Dispose()) could result in a deadlock of the calling Thread. This behavior is caused by GC.WaitForPendingFinalizers() in SqlCeConnection.Close(). GC.WaitForPendingFinalizers() waits for the GC-Finalizer-Thread to finalize all pending instances. There are a lot of circumstances, where it is not guaranteed that all finalizers will be terminating gracefully.
We encountered this problem in our application. As a result our whole application hangs!
See also http://social.msdn.microsoft.com/forums/en-US/sqlce/thread/40e82853-b8b7-4512-bdc5-0268f4fe6f15