Preheat oven to 350°F (175°C). Grease two 9-inch round cake pans, line bottoms with parchment, grease parchment, and dust with flour.
In a medium bowl, whisk together flour, baking powder, baking soda, and salt. Set aside.
In a stand mixer fitted with paddle attachment, cream butter and sugar on medium-high for 4-5 minutes until light and fluffy. Scrape down bowl.
Add eggs one at a time on medium-low, beating well after each. Add vanilla and coconut extract, beat 30 seconds, and scrape down bowl.
In a small bowl, whisk together sour cream and milk until smooth.
With mixer on low, add dry ingredients alternately with sour cream mixture in three additions of dry and two of wet, beginning and ending with dry. Mix until just combined.
Fold in 1 cup sweetened shredded coconut by hand with gentle sweeping motions until evenly distributed.
Divide batter evenly between prepared pans. Bake 28-34 minutes until golden and a toothpick comes out with moist crumbs.
Cool cakes in pans on a wire rack for 10 minutes. Stir cream of coconut; warm if needed until pourable.
Poke holes all over each warm cake layer with a skewer. Slowly pour half the cream of coconut over each layer, allowing it to soak in.
Cool cakes completely in pans (about 1 hour). Run a knife around edges, flip onto rack, and peel off parchment. Chill layers for 1 hour or overnight for easier assembly.
In a chilled mixing bowl, beat cold heavy cream, powdered sugar, and vanilla on medium until soft peaks, then increase to medium-high until stiff peaks form.
Place one cake layer on a serving plate. Spread with a generous layer of whipped cream. Top with second layer and frost entire cake with remaining cream.
Press sweetened shredded coconut generously onto the sides and top of the frosted cake. Refrigerate for at least 2 hours before slicing.