Preheat the oven. Preheat the oven to 375°F. Spray a 9-inch by 13-inch baking dish with nonstick cooking spray.
Prepare the potatoes. Place diced potatoes in a large pot of salted water. Bring to a boil and simmer for 8-10 minutes, until just barely fork-tender. Drain well and set aside.
Brown the ground beef. Heat olive oil in a large skillet over medium-high heat. Add ground beef and diced onion. Cook for 6-8 minutes, crumbling the beef, until browned and the onions are softened.
Add the garlic. Stir in minced garlic and cook for 1 minute. Drain any excess grease from the skillet.
Season the beef. Add Worcestershire sauce, paprika, dried thyme, kosher salt, and black pepper. Stir to combine and cook for another minute. Remove from the heat.
Make the roux. Melt butter in a medium saucepan over medium heat. Add flour and whisk for 1 minute, until smooth.
Add the milk. Slowly pour in whole milk, whisking constantly. Cook for 4-5 minutes, stirring frequently, until the sauce begins to thicken.
Make the cheese sauce. Stir Dijon mustard, salt, and pepper into the sauce. Remove from the heat and add 1½ cups of shredded cheddar cheese. Stir until completely melted and smooth.
Assemble the casserole. Spread half of the cooked potatoes in the prepared baking dish. Top with half of the seasoned ground beef and approximately one-third of the cheese sauce.
Add the remaining layers. Add the remaining potatoes and ground beef. Pour the rest of the cheese sauce evenly over the top.
Top with cheese. Sprinkle the remaining 1 cup of shredded cheddar cheese over the casserole.
Bake. Bake uncovered for 25-30 minutes, until the cheese is melted, the sauce is bubbly, and the potatoes are completely tender.
Serve. Remove from the oven and allow the casserole to rest for 5-10 minutes. Garnish with fresh parsley, if desired, and serve warm.