Peel sweet potatoes. Dice into 2-inch cubes. Add the sweet potatoes and cinnamon stick to a large pot of salted water. Bring to a boil over high heat, then lower the heat to a simmer and cook until the potatoes are tender about 15-20 minutes.
Drain sweet potatoes well. Using a potato masher, mash well so that there are no big chunks.
Add softened butter, evaporated milk, brown sugar, vanilla, ground cinnamon, nutmeg and salt. Mix by hand or for a smoother texture, with a hand mixer or food processor. Stir until completely combined then mix in eggs until incorporated.
Preheat the oven to 350 degrees. Butter or grease a 9x9 inch baking dish and transfer the sweet potato mixture to the dish.
For the topping, in a medium bowl, combine all topping ingredients: flour, brown sugar, melted butter, salt, pecans, oats and cinnamon. Sprinkle evenly over the sweet potato mixture.
Bake for 20 minutes covered with aluminum foil. Uncover and bake for another 10 minutes at 350 degrees, until set in the middle and golden on top.