In a large bowl, whisk together flour, sugar, salt, and yeast.
Gradually add cold milk while stirring until a shaggy dough forms.
Knead the dough on a lightly floured surface for 5-7 minutes until smooth and elastic.
Shape into a rectangle, wrap tightly in plastic wrap, and refrigerate for at least 1 hour.
Place chilled butter slices between two sheets of parchment paper and roll into an 8×12-inch rectangle.
Refrigerate the butter sheet until firm but still pliable, about 15 minutes.
Roll the chilled dough into a 12×20-inch rectangle on a lightly floured surface.
Place the butter sheet in the center of the dough, then fold the sides over the butter like an envelope.
Roll this package into a 10×24-inch rectangle, then fold in thirds like a letter.
Wrap in plastic and refrigerate for 1 hour. Repeat this folding process twice more with hour-long chilling periods between each fold.
In a medium bowl, beat softened butter and sugar until light and fluffy.
Add almond flour and salt, mixing until incorporated.
Beat in eggs one at a time, then add vanilla extract, almond extract, and rum if using.
Refrigerate the filling until needed.
After the final fold, roll the dough into a 10×20-inch rectangle about 1/4-inch thick.
Cut into triangles with 5-inch bases.
Spread 1 tablespoon of almond filling along the base of each triangle.
Roll up from the base to the tip, curving the ends slightly to form a crescent shape.
Place on parchment-lined baking sheets, leaving 2-3 inches between each croissant.
Cover the shaped croissants loosely with plastic wrap and let rise until nearly doubled, about 2 hours (or overnight in the refrigerator for 8-10 hours).
Preheat oven to 375°F (190°C).
Brush croissants with egg wash and sprinkle with sliced almonds.
Bake for 20-25 minutes until deeply golden brown.
Cool slightly, then dust with powdered sugar before serving.