Preheat the oven to 350°F (177°C). Grease a 9×13-inch baking dish or line it with parchment paper. Whisk together the flour, baking powder, baking soda, salt, cinnamon, ginger, cardamom, cloves, and nutmeg.
Beat the softened butter, oil, granulated sugar, and brown sugar for about 2 minutes, until creamy. Beat in the eggs and vanilla, then mix in the sour cream until smooth.
Mix in about half of the dry ingredients on low speed just until combined. Add the milk, followed by the remaining dry ingredients. Mix only until no dry flour streaks remain.
Spread the batter evenly in the prepared pan. Bake for 30–35 minutes, until a toothpick inserted in the center comes out clean or with a few moist crumbs. Cool completely, about 1 hour.
Beat the softened butter until creamy, about 2 minutes. Mix in the cinnamon, ginger, cardamom, cloves, nutmeg, and vanilla. Gradually beat in the powdered sugar, adding heavy cream or milk 1 tablespoon at a time until smooth and spreadable.
Spread the buttercream over the completely cooled cake. Make swirls with the back of a spoon or offset spatula and lightly dust with cinnamon before slicing.