Preheat oven to 375°. Place peeled potatoes in a large saucepan and add water to cover by at least 2"; season generously with salt. Bring to a boil, reduce heat, and simmer until a paring knife easily slides through potatoes, 25–35 minutes. Let cool slightly.
While potatoes are cooking, heat 1 Tbsp oil in a large skillet over medium. Cook bacon, stirring often, until browned and crisp, 8–10 minutes. Transfer bacon to a plate.
Increase heat to medium-high and cook ground beef in same skillet until cooked through, about 5 minutes. Season with salt and transfer to plate with bacon.
Heat remaining 1 Tbsp oil in same skillet and add onions, fennel, carrot, and celery. Season with salt and cook, stirring occasionally, until vegetables are lightly browned and very soft, 12-15 minutes. Add tomato paste and flour and cook, stirring constantly, until paste darkens, about 1 minute. Add wine, bring to a simmer, and cook until reduced by half (it should no longer smell boozy), about 5 minutes. Add broth, rosemary, and thyme; return meat to skillet and simmer, stirring occasionally, until liquid is almost completely evaporated and any remaining sauce is the consistency of gravy, 15–20 minutes. Transfer filling to a 3-qt. baking dish.
While meat and veggie mixture is reducing, bring cream and butter to a simmer over medium heat. Use a potato masher to get the potatoes as smooth as possible. Mix in warm half-and-half mixture. Whisk egg yolks in a small bowl, then mix into potatoes; season with salt and pepper.
Carefully top filling with half of mashed potatoes; smooth out over filling so that no meat is peeking up through potatoes. Repeat with remaining potatoes, swirling decoratively or use a piping bag.
Bake shepherd’s pie until filling is bubbling around edges and top is golden brown, 45–50 minutes.