Preheat oven to 400° and spray a 9 x 13 baking dish with a non stick spray. Set aside.
Wash potatoes in cold water, slice in half and add to a large bowl. If the potatoes are on the larger size, cut into 3 pieces.
In a large skillet, melt butter over low/medium heat.
Add onions, saute for 4-5 minutes then add minced garlic and cook for an additional minute.
Sprinkle flour over onions and garlic and cook for 1-2 minutes on low heat.
Slowly pour chicken broth into pan, then add heavy cream, seasoning, salt and pepper, stirring until combined.
Continue cooking, stirring until sauce thickens up a bit and remove from heat just as sauce starts to boil.
Add two cups of sharp cheddar cheese to skillet and stir until combined.
Once cheese has melted, add a couple large spoonfuls of cheese sauce to the bottom on baking dish.
Next, place ⅓ of the baby potatoes into the pan.
Spoon ½ cup of sour cream over the potatoes, 1 cup of diced ham, then add ⅓ of the cheese sauce on top of the diced ham.
Sprinkle with ½ the pepper jack cheese, then layer again with ⅓ potatoes, remaining ½ cup of sour cream, 1 cup of ham and ⅓ cheese sauce.
Last layer is remaining potatoes, last ⅓ cheese sauce and the top with remaining shredded cheese.
Cover with foil and place in the oven.
Bake for 60-75 minutes or until potatoes are tender and cheese sauce is bubbly.
Carefully remove from oven, remove foil, then place back into the oven for 15 minutes to brown the cheese up a bit.