I can answer my own question after reading spi_set_baudrate() in the pico-sdk.
SPI clock must be an even subdivision of another clock. At the default main clock of 125 MHz, the even subdivision is 62.5 MHz, as I got.
The trick I found while reading is when I called set_sys_clk_khz() the SPI clock then defaults to referencing a different 48 MHz clock, and thus the even subdivision is the 24 MHz I saw.
However you can request to use the system clock by adding this line into CMakeLists.txt:
add_compile_definitions(PICO_CLOCK_AJDUST_PERI_CLOCK_WITH_SYS_CLOCK=1)
It is not clear to me if changing this setting might mess up other peripherals, but my program runs OK.
With that in place I can ask for a 150 Mhz system clock and get a 75 MHz SPI clock and get close to 30 fps. Asking for 200 MHz and 100 MHz works, and I get ~40 fps.