Pat the roast dry with paper towels and generously season with salt and pepper on all sides. Heat olive oil in a large Dutch oven over medium-high heat until shimmering. Sear the roast on all sides until deeply browned, about 3-4 minutes per side.
Remove the roast and set aside. In the same pot, reduce heat to medium and add onions. Cook until they begin to soften and turn translucent, about 3-4 minutes. Add minced garlic and continue cooking for 30 seconds until fragrant.
Pour in beef broth, using a wooden spoon to scrape up all the flavorful brown bits from the bottom of the pot. Add crushed tomatoes, tomato paste, Worcestershire sauce, Italian seasoning, thyme, and bay leaves. Stir to combine, bringing the mixture to a gentle simmer.
Return the seared roast to the pot, nestling it into the tomato mixture. Cover with a tight-fitting lid and transfer to a preheated 325°F oven. Cook for 2 hours, then add the carrots and potatoes around the roast. Continue cooking for another hour or until the meat is fork-tender and vegetables are cooked through.
Remove the pot from the oven. Transfer the roast and vegetables to a serving platter and tent with foil to keep warm. Remove bay leaves and thyme stems from the sauce.
Return the pot to the stovetop over medium-low heat and whisk in the heavy cream. For a thicker gravy, mix cornstarch with 2 tablespoons cold water and stir into the sauce. Simmer until it reaches your desired consistency.
Slice or shred the roast and arrange with vegetables on a platter. Ladle the creamy tomato gravy over the top and garnish with fresh parsley.