I've now implemented a Nature and an IncrementalProjectBuilder, although the latter is just a skeleton that prints out its arguments. I've done all the pre-work of associating the nature with the project, and having the nature associate the builder with the project. For now, I'm just trying to understand the skeleton behavior.
I'm watching what "kind" values are sent to the "build" method, and I've only ever seen AUTO_BUILD and FULL_BUILD. When I select "Clean" from the "Project" menu, I see it called with FULL_BUILD, and then AUTO_BUILD. I've never seen it called with CLEAN_BUILD or INCREMENTAL_BUILD. Reading through the online doc, I see that I would never see INCREMENTAL_BUILD if I have "Build automatically" set to true.
The other thing that I do to make the IPB run is saving files. That only ever sends AUTO_BUILD to it.
I also overrode the "startupOnInitialize" and "clean" methods of the builder, to see when they are called. I do see it call "clean" when I select "clean" from the menu, which is followed by a FULL_BUILD.