Preheat the oven to 400°F (204°C). Lightly grease a 9x13 baking dish with nonstick cooking spray.
Peel 1 1/2-2 pounds russet potatoes and cut them into bite-sized cubes, about 1/2-inch. Place the potatoes and 4 cups cubed ham into the prepared baking dish. Set aside.
In a medium saucepan, melt 1/4 cup salted butter over medium heat. Whisk in the 1/4 cup all-purpose flour and 3 teaspoons minced garlic, cooking for 1 minute while whisking constantly.
Gradually whisk in 2 cups chicken broth and 2 cups half and half. Stir in 2 tablespoons Dijon mustard, 1/2 teaspoon paprika, 1/4 teaspoon salt, and 1/4 teaspoon black pepper. Bring to a simmer over medium heat and cook, stirring occasionally, for 3–5 minutes, until thickened.
Gradually stir in 1 cup shredded sharp cheddar cheese until it is fully melted into the sauce. Remove the saucepan from the heat.
Pour the sauce evenly over the potatoes and ham, ensuring everything is well coated.
In a small bowl, prepare the topping by stirring together 1/2 cup panko bread crumbs, 2 tablespoons salted butter, and 1/2 teaspoon garlic powder. Sprinkle over the top of the casserole to cover.
Bake, uncovered, for 40 to 45 minutes, or until the potatoes are fork-tender and the topping is golden brown.
Notes
They sell cubed ham in packages at the grocery store in the meat section, but this is also a great use for leftover ham.
Instead of using Russet potatoes, grab a 32-ounce bag of frozen diced potatoes instead. No need to thaw.