Preheat the oven to 375°F. Lightly grease a deep 9×13-inch baking dish with nonstick cooking spray or butter.
Wash the potatoes thoroughly and slice them into thin, even rounds, approximately ⅛ inch thick. Set aside.
Heat the olive oil in a large skillet over medium-high heat. Add the ground beef and cook for 5 to 7 minutes, breaking it apart with a wooden spoon as it browns.
Add the diced onion to the skillet and continue cooking for 3 to 4 minutes until the onion softens and the beef is completely browned. Drain any excess grease.
Stir in the minced garlic and cook for 1 minute. Add the tomato paste, tomato sauce, Italian seasoning, paprika, ½ teaspoon salt, and ¼ teaspoon black pepper. Mix well and simmer for 5 minutes. Remove from the heat.
Melt the butter in a medium saucepan over medium heat. Add the flour and whisk continuously for 1 minute. Gradually pour in the milk and beef broth, whisking until smooth. Stir in the remaining salt and black pepper. Cook for 4 to 5 minutes until the sauce thickens slightly.
Spread ¼ cup of the creamy sauce across the bottom of the prepared baking dish. Arrange half of the sliced potatoes in an even, slightly overlapping layer.
Spoon approximately half of the remaining creamy sauce over the potatoes. Spread the cooked ground beef mixture evenly on top. Sprinkle with ½ cup mozzarella cheese and ½ cup cheddar cheese.
Arrange the remaining sliced potatoes over the beef mixture. Pour the remaining creamy sauce evenly over the potatoes, making sure the surface is well covered.
Cover the baking dish tightly with aluminum foil and bake for 55 to 65 minutes, or until the potatoes are tender when pierced with a fork.
Carefully remove the aluminum foil. Sprinkle the remaining 1½ cups mozzarella cheese and ½ cup cheddar cheese evenly over the casserole. Arrange the tomato slices across the cheese.
Return the uncovered casserole to the oven and bake for another 15 to 20 minutes, until the cheese is completely melted, bubbling around the edges, and lightly golden brown.
Remove the casserole from the oven and allow it to rest for 10 to 15 minutes before serving. Sprinkle with dried parsley or basil, if desired. Serve warm.