Olá, novamente, vamos ao mesmo blablabla de sempre, tenha em mente que voce não está desenvolvendo para um Desktop, e sim para um Pocket com memória e processamento limitados, uma questão importante para voce ter em mente é que a memória do dispositivo é dividida em processamento e armazenamento, ou seja, se voce tem em seu dispositivo uma base SqlCe ,que ocupa por exemplo 5Mb, e na sua aplicação voce busca todos os dados e coloca-os em um dataset, voce acabou de duplicar a mesma informação na mesma memória, ou seja, voce já estava utilziando 5Mb do armazenamento e passou a utilizar praticamente 5 mb no processamento, que são a mesma memória, agora vem o pior, se voce não liberar esse dataset, e abrir um outro, vc vai passar a utilizar 10 mb da memória de processamento. É claro que estou utilizando exemplos, mas isso sim pode acontecer, e é comum esse erro que voce reportou, pode acontecer também outros erros, onde o SO vai pedir para voce fechar alguma aplicação pois o mesmo está sem memória disponível para processamento.
Sugiro fortemente a que voce utilize SqlCeDataReader ao invés do Dataset, e certifique-se de estar utilizando Dispose nas instancias de seus objetos não mais utilizados, garanto que o seu problema vai acabar, se voce encontrar alguma outra alternativa, e continuar a utilizar o DataSet, potencialmente, quando esta sua aplicação estiver em produção, um usuário vai reportar para voce que após 3 horas de utilização da aplicação esse erro aconteceu....
Abraços
Julio Tsukamoto