Preheat oven to 350°F (175°C). Grease three 9-inch cake pans with butter or nonstick spray, line bottoms with parchment paper, then grease the parchment.
In a large bowl, whisk together flour, baking powder, and salt until evenly combined. Set aside.
Beat softened butter in stand mixer on medium speed for 2 minutes until pale and smooth. Add sugar and beat on medium-high for 4-5 minutes until light and fluffy, scraping down sides occasionally.
With mixer on low, add eggs one at a time, waiting until each is fully incorporated before adding the next. Add vanilla and coconut extracts and mix until combined. Scrape down bowl.
In a small bowl, stir together buttermilk and cream of coconut. With mixer on lowest speed, add flour mixture and buttermilk mixture alternately in thirds, starting and ending with flour, mixing just until combined. Do not overmix.
Divide batter evenly among prepared pans and smooth tops. Bake for 28-32 minutes until tops spring back and a toothpick inserted comes out clean. Cool in pans for 10 minutes, then turn out onto wire racks to cool completely.
Whip heavy cream to medium-stiff peaks. In a separate bowl, stir together cream of coconut and shredded coconut. Gently fold whipped cream into the coconut mixture using broad strokes to preserve airiness. Refrigerate until assembly.
Beat cream cheese on medium for 2-3 minutes until smooth and fluffy. Add butter and beat for another 2 minutes. Reduce speed to low and add sifted powdered sugar one cup at a time. Add vanilla, coconut extract, and 2 tablespoons heavy cream. Beat on medium-high for 2 minutes until light and fluffy.
Level cake layers with a serrated knife if needed. Place one layer on a cake stand and spread half the coconut filling on top, leaving a 1/2-inch border. Top with second layer and remaining filling. Place third layer on top.
Apply a thin crumb coat of cream cheese frosting over the entire cake. Refrigerate for 20-30 minutes until set. Apply a final generous layer of frosting and smooth with an offset spatula.
Press shredded coconut onto the sides and top of the cake. Refrigerate for at least 30 minutes before slicing. Serve at room temperature for the best texture.