Wow, the amount of effort put into creating and maintaining a vibrant community around Zentyal never fails to blow me away. So I had some time to look into this and it turns out that yes, there is definitely a trick to getting shared calendars and contacts to work in Zentyal. You have to set a couple options in /etc/sogo/sogo.conf, which means you have to do it the right way (set up a stub in /etc/zentyal/hooks, or the less right way (edit /usr/share/zentyal/stubs/openchange/sogo.conf.mas). Either way you need to add the following options:
SOGoCalendarDefaultRoles = ("PublicViewer", "ConfidentialDAndTViewer", "PrivateDAndTViewer");
SOGoContactsDefaultRoles = ("ObjectViewer");
Now I can share calendars and address books as SOGO intended. I wonder if this is one of those "enhancements" that the commercial version of Zentyal has but not the open source version. If so I expect this post to disappear soon! ;-)