Sorting Entries by category, from multiple category groups
Finally figured it out, I had been so close! The following works:

{% set days       = craft.categories.group('day') %}
{% set activities = craft.categories.group('activity') %}

    {% for day in days %}
        &lt;h2&gt;{{ day.title }}&lt;/h2&gt;

        {% for activity in activities %}
            {% set entries = craft.entries.section('attractions').relatedTo(
              'and',
              { targetElement: day },
              { targetElement: area }
            ) %}

            {% if entries | length %}
                &lt;h3&gt;{{ area.title }}&lt;/h3&gt;

                {% for entry in entries %}
                    &lt;p&gt;&lt;a href="{{ entry.url }}"&gt;{{ entry.title }}&lt;/a&gt; {{ entry.startTime|date('H:i') }}&lt;/p&gt;
                {% endfor %}
            {% endif %}
        {% endfor %}
    {% endfor %}