To be clear first: I still think that version 4 is a good improvement and it really is what version 3 ought to be.
This is a list of impressions after 4 hours of playing with new features:
Many-to-many relationships: Yeah! Finally! Yeah! No more "custom connecting relationships". Relationship editor now divides the relationships in 3 groups: 1-to-many, many-to-1 and many-to-many. Great for entities with a lot of relationships. What is missing are attributes on relations. And I couldn't find a way to start a workflow after assigning a many-to-many relationships. Is it really not possible or did I just miss it? I heard that version 5 will dealt with it.
System-to-system relationships: Yeah again! And not only that! You can have more relationships with the same entity.
Self-referential relationship: Yeah again! You can relate entity to itself.
Multi tenant support: From developers point view I thought it was different. I thought that you could manage two sites at once, but as it seems that multi tenant is almost no different than installing another version of CRM. Sites have different metadata, data, ... I admit that it is practical if you want to host CRM for others, but in my case it is almost the same as before. Oh. Another thing that is better: You can have only one login for multiple organizations. Good post about this if from Mr Dave.
Reporting architecture: Because CRM went from intranet to Internet, there is no direct access to the SQL Report server. This eases up the configuration of the servers because of the impersonation things. Now the CRM server requests the report from the SRS directly with CRMAppPool credentials (e.g. NetworkService) The SQL Report server has add-in called CRM data connector which supports use of filtered views. Then the intermediate report is sent to the CRM server, that displays the report to the user. Now it is a CRM server, who actually allows viewing the report to the user. In version 3 this was a SRS thing. A good post about this is here.
Advanced find: You can actually display columns from related entities! Now you can, let's say, see a phone number of the primary contact in the account list. Way to go!
Mail merge: Finally you don't need outlook to perform a mail merge.
Duplicate checking: I'll say better than nothing, but it could be better :) You can define fields that are checked if there is a duplicate. You can say how many first or last letters define a duplicate and that's it. MS could actually implement some additional methods. Soundex is actually implemented in SQL server (but it is not very good). In my applications I use the following methods: Double metaphone (sounds-like algorithm better that Soundex) and Levenstein distance (detects typos). Yes. I know that you could implement it by yourself, but hey! Why not get it out of the box? First you could run a double metaphone check and then do a Levenstein difference on the results.
Import data wizard: Now supports most record types. Good thing is that it automatically maps picklist values with display values. No need to know the actual values of the picklist options. You can reuse mappings - a good thing if you have a constant import process in your company. Duplicate detection works when you are importing things. And you get an email when the job ends.
Typing in lookup field: Now this is a neat feature. Now you can type in a value in a lookup field. After losing focus, the value is checked and if the value is OK, it becomes underlined, otherwise it turns to RED. Great functionality.