Heat the olive oil in a large, deep skillet over medium heat. Add the diced onion and cook for 4 to 5 minutes, stirring occasionally, until softened. Add the garlic and cook for 30 seconds.
Stir in the dry orzo and cook for about 1 minute so the pasta is lightly coated in oil.
Add the diced tomatoes with their juices, 2 1/2 cups broth, Italian seasoning, salt, and black pepper. Bring to a gentle simmer.
Reduce the heat to medium-low and cook uncovered for 10 to 12 minutes, stirring frequently so the orzo does not stick. Add a splash of broth if the skillet becomes dry before the pasta is al dente.
Stir in the heavy cream and spinach. Cook for 1 to 2 minutes, until the spinach wilts and the sauce looks creamy.
Turn off the heat. Fold in the Parmesan and lemon zest, taste and adjust the seasoning, then rest for 2 minutes. Finish with fresh basil if desired and serve warm.