I think I understand the problem. Groovy's Map coercion doesn't work on concrete types. Since the SpringApplicationBuilder is a concrete type, it instead tries to instantiate it, but because there's no default constructor it fails. When I tried Map coercion on a type that has a default constructor, it instantiates fine, but then my mocked methods aren't actually run.
TL;DR? I had to give up.