Dug a bit deeper.
C:\Program Files (x86)\MSBuild\MonoGame\v3.0\MonoGame.Content.Builder.targets contains the following:
<Exec Command=""$(MonoGameContentBuilderExe)" /@:"%(ContentReferences.FullPath)" $(Header)"
WorkingDirectory="%(ContentReferences.RootDir)%(ContentReferences.Directory)" />
As you can see from the runline above, it seems that ContentReferences.RootDir and .Directory are defined, but that ContentReferences.FullPath is not defined in this context. If I hack the .targets file and give it a dummy filename, then MGCB.exe tries to open that file. If I use the filename of my .mgcb file then I believe the tool will build my project.
I don’t know enough about VS build config files to know what to do next. Maybe .FullPath is the wrong child node (I have tried a few random ideas but none of them were defined either), or maybe there is more I should have set up in Visual Studio (some prooperty or something I need to set). My .csproj looks like this:
<MonoGameContentReference Include="Content\SmallWorldGP.Windows.Content.mgcb" />
Should there be more attributes on that, for example?