Freeze the cabbage 2 days ahead and thaw overnight to soften the leaves and make them easy to separate.
If you want to make the recipe using raw unfrozen cabbage you will have to boil the leaves or the cored head of cabbage until the leaves are partially cooked.
Core the cabbage and separate the leaves. You will need to remove and discard any heavy cores/spines from the leaves. To do this, using a small knife, gently slice the core end of the leaf so the thickness is the same as the rest of the cabbage leaf.
Partially boil the rice until it is 1/2 cooked, about 8 minutes.
Preheat the oven to 325°F.
Heat the oil in a large skillet and cook the onion for 3-5 minutes until it begins to soften. Stir in the garlic and remove from the heat to cool. In a large bowl, mix together, the beef, salt, pepper to taste, ketchup, eggs, dill, partially cooked rice and the onion/garlic mixture.
Combine the sauce ingredients in a large pot and bring to a boil over medium-high heat. Simmer the tomato mixture for 10-15 minutes, stirring frequently.
Place a cabbage leaf on the work surface, curled side up. Place 2 to 3 tablespoons of the meat mixture in the center of the leaf. Fold the core end of the leaf over the filling, then fold the sides in. Roll up the leaf to encase the filling. Repeat with the other leaves and the remaining meat mixture.
Spoon a thin layer of the tomato sauce in the bottom of a large roasting pan. Arrange the rolled leaves in the roasting pan, seam side down. Spoon the sauce over each layer of the rolls. Add a little water if necessary, to just cover the stuffed cabbage.
Bake, tightly covered, at 325°F for 90 minutes to 2 hours, basting occasionally, until the cabbage is perfectly tender.
Transfer the cabbage rolls to a serving platter. Garnish with dill and serve with lots of sour cream. A simple salad and some fresh rye bread are all you need to turn this recipe into a real feast.