OK, the reason seems to be that somehow this user 2610 (me, site-wide admin) has three personal calendars in the calendars table:
dotlrn-test=# select * from calendars;
calendar_id | calendar_name | owner_id | package_id | private_p
-------------+-----------------------------+----------+------------+-----------
5396 | Personal | 2610 | 4898 | t
5465 | Personal | 5397 | 4898 | t
5735 | Software Business | 2610 | 5733 | f
5809 | Personal | 2610 | 5733 | t
6044 | Tiedonhallinnan peruskurssi | 2610 | 6042 | f
6177 | Personal | 6109 | 4898 | t
6247 | Personal | 6179 | 4898 | t
6293 | Personal | 2610 | 6042 | t
(8 rows)
When I deleted the rows 5809 and 6293, the calendar started working ok again. The question remains, how these extra calendars got to exist in the first place. I certainly didn't create them explicitly (or at least, on purpose). It seems that every time you create a class and implicitly a calendar for it, you get a new personal calendar, too.