Just wanted to report back that I was able to figure it out, but took a bit more finagling than I thought and I may have done it a very stupid way.
First, I calculated the aspect ratio of 12 MP, then used that to calculate the optimal video width after fixing the video encoder height to be 4k (2160). I then used the ratio of new width to 12 MP width to compute the ispScale value. But setIspScale also only takes integer ratios with max numerator / denominator values quite small so I rounded those by finding the closest approximating integers. But then h265 requires height to be a multiple of 8 and width to be a multiple of 32, so it required a bit of further cropping to ensure these multiples are preserved.
The result of all this is a frame that is very close to full FOV, but still with some minimal cropping. I'm happy with it and honestly pretty exhausted from banging my head against these ratios, so I welcome anybody with a better answer 🙂