I've been porting an application of ours to .NET CF 2.0, Mobile 5.0 and SQL Mobile the past couple of weeks.
.NET CF 2.0 is impressive. The .NET Compact Framework 1 was a bit lacking in functionality - it felt like Microsoft shipped an unfinished product. .NET CF 2 provides a lot of new functionality : Pocket Outlook Access, Phone and messaging capabilities, new controls, etc. Basically everything the guys at OpenNet CF had in their previous version, is now in the new version of the framework. They've released a new version of their library that adds even more functionality - download it and use it if you work with the Compact Framework.
Working with generics is an absolute godsend - can't tell you how much the incessant casting of objects chewed on my nerves...
I'm a bit disappointed in the SQL Mobile zone - all the old features (read "bugs) are still there like the failure of cleaning up SqlCeCommand objects. That said, being able to make more than one connection to the database and remove my Singleton connection manager class is great! Side track : Note, Making the connection to the database is a real bottleneck. For batch operations such as inserts (Microsoft, when can we get batch transactions on Mobile?), it's best to keep a connection open and reuse the same command - you'll notice the speed difference when you don't.
Microsoft has added support in the Visual Studio IDE for designing SQL Mobile databases (avoiding the pain of typing in SQL queries using a stencil on the device). Works great, get's deployed onto your device and you can even query it! What I'm missing there (and it's driving me nuts) is support for ordering columns (I'm adding a new column and I want it to be next to the primary key), renaming tables (the way I've found to do this is to recreate the entire table), and stored procedures.
OK, the stored procedures is going a bit too far, but it would be nice, wouldn't it?