Finally figured it out. I was calling the function correctly, the problem was something else.
The titanium mod defines normal and expensive recipes. Your mod doesn't support that (correct me if I'm wrong), so I copied the fields from "normal" to the base recipe. This worked to get the function to run and generate the intermediates, but the plate recipe was in an inconsistent state. The "normal" recipe was still there and unchanged, and that is what was being read when I loaded into the game.
Long story short, I set recipe.normal and recipe.expensive to nil and everything works as expected.