How to exclude entries by type? I did find this post while looking to do something similar, but I'm beginning to wonder if there's a bug.

With code along the lines of:

craft.entries.section("pages").type("not landing")


I'm unexpectedly getting no results. Looking at the logs, it's generating queries that includes:

SELECT * FROM `craft_entrytypes` `t` WHERE `t`.`handle`='not landing'


I have to think this is at least partly responsible for getting no results. Could anyone point out if I've got the syntax wrong or something?
.type("not landing") won't work. If you reread the post you linked it also states this — I believe it was more of a feature request. You will need to test each entry and either use it directly or merge it into an array for later use.

{% set entries = craft.entries.section("pages") %}
{% for entry in entries if entry.type != "landing" %}
    {{ entry.title }}
{% endfor %}


or 

{% set filteredEntries = [] %}
{% set entries = craft.entries.section("pages") %}
{% for entry in entries if entry.type != "landing" %}
    {% set filteredEntries = filteredEntries|merge(entry) %}
{% endfor %}


As a side note, if you are using a structure with a hierarchy where landing pages are at the root level and all other entries are children, then you can also use:

{% set entries = craft.entries.section("pages").level('&gt; 1') %}