Preheat your oven to 350°F and grease a 9x13 inch baking pan (or similar size). While the oven heats, whisk together the flour, baking powder, baking soda, salt, cinnamon, nutmeg, ginger, and cloves in a medium bowl. Set this dry mixture aside—having it ready before you mix the wet ingredients ensures the batter doesn't sit too long and lose its leavening power.
In a large mixing bowl, whisk together the vegetable oil, granulated sugar, and brown sugar until combined and slightly lightened. Add the eggs one at a time, whisking well after each addition to incorporate air and create a lighter crumb. Stir in the vanilla extract and sour cream until smooth. Finally, fold in the grated zucchini and drained pineapple—the moisture from these ingredients adds tenderness and flavor to the cake.
Gently fold the dry ingredient mixture from Step 1 into the wet mixture from Step 2 until just combined—don't overmix, as this can lead to a dense cake. Pour the batter into your prepared pan and smooth the top. Bake for 30-35 minutes, until a toothpick inserted in the center comes out clean or with just a few moist crumbs. I like to bake cakes like this in the lower third of the oven to ensure even cooking without the edges browning too quickly. Remove from the oven and let cool completely on a wire rack before frosting.
While the cake cools, beat the softened cream cheese and unsalted butter together in a medium bowl using an electric mixer on medium speed for 2-3 minutes, until the mixture is light and fluffy. This step is crucial because whipping air into the frosting creates a smoother, creamier texture. Add the sifted powdered sugar and vanilla extract, then beat on medium speed for another 3-4 minutes until the frosting is pale, fluffy, and free of lumps. I find that sifting the powdered sugar beforehand prevents any grainy texture in the final frosting.
Once the cake from Step 3 has cooled completely, spread the frosting from Step 4 evenly over the top using an offset spatula or the back of a spoon. Sprinkle the cinnamon sugar topping over the frosting, distributing it evenly across the surface for a nice finish.