Place diced potatoes in a large pot and cover with water. Bring to a boil and cook for 15 minutes until fork-tender. Drain and set aside.
In the same pot, melt butter over medium heat. Whisk in flour and cook for 2 minutes, stirring constantly to create a roux.
Gradually add milk and chicken broth, whisking continuously to avoid lumps. Bring to a gentle simmer.
Add the cooked potatoes back to the pot. Using a potato masher, mash about half of the potatoes, leaving the rest chunky for texture.
Stir in cheddar cheese until melted and smooth. Add salt and pepper to taste.
Remove from heat and stir in sour cream and half of the crumbled bacon.
Serve hot, topped with remaining bacon, green onions, extra cheese, and additional sour cream if desired.