Preheat the oven to 375°F.
Make the tomato sauce: In a medium pot, heat the olive oil over medium heat. Add the onion and sauté until tender, 4 to 5 minutes. Add the garlic and sauté until fragrant, about 1 minute.
Add the tomatoes and bring to a simmer. Cover and simmer until the sauce is flavorful, 25 to 30 minutes. Stir in the basil and season with salt and pepper.
While the sauce simmers, make the stuffed chicken: In a large skillet, heat the olive oil over medium heat. Add the onion and sauté until tender, 4 to 5 minutes.
Add the garlic and spinach; cook until the spinach is fully wilted, 3 to 5 minutes. Season with salt and pepper. Let cool slightly, about 5 minutes, then stir the shredded mozzarella and Parmesan cheeses into the spinach. Squeeze liquid out with paper towels or you will have a watery mess.
Lay the chicken cutlets on a clean cutting board. Place about ¼ cup spinach mixture on one end of a cutlet, then roll the cutlet to encase the filling. If you have trouble keeping the cutlet together, secure it with a toothpick. Repeat with the remaining cutlets and filling.
Pour the bread crumbs into a small bowl. Carefully roll each chicken bundle in the bread crumbs until it’s evenly coated. Set aside.
Assemble the dish: Pour the tomato sauce into a large casserole. Place the stuffed chicken on top of the tomato sauce. Bake about 30 minutes and top each piece of chicken with slices of fresh mozzarella.
Bake until the chicken is cooked through, the sauce is bubbly and the cheese is melted, about 10 more minutes. Let cool 10 minutes. Garnish with chopped basil and serve.