I just did some more googling, now I know that 'inline' is the issue, and found an article that talks about this as a problem with MacPorts for mod_perl 2.0.4:
The relevant lines:
This is caused by the code assuming to be compiled using GCC against the GCC89 "standard", but being actually compiled by clang with C99. GNU89 and C99 differ in how they handle inline. Further reading: http://clang.llvm.org/compatibility.html#inline.
Which made me wonder:
% gcc --version | head -1
i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
% cc --version | head -1
Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
The problem appears to have been that APR was built with gcc, but because Perl's Configure had picked up cc (which was clang, not gcc), then mod_perl was being compiled with cc, but getting the wrong definition for MP_INLINE as a result.
Ensuring that everything in the chain was built with gcc sorted this out.