Cook the breakfast sausage over medium heat or until brown and cooked through. (About 10 minutes) Once cooked, cut the sausage into bite size pieces and toss into a large bowl.
In the same skillet, melt the butter over medium heat. Add the onion slices and cook till gold and translucent. (About 8 minutes)
To the sausage in the large bowl, add the sauteed onions, spinach, bagel chunks, tomatoes, rosemary, Parmesan cheese, 1 cup Gruyere, I cup Cheddar, 1 teaspoon salt, 1/2 teaspoon black pepper, and 3 shakes of Everything But the Bagel Seasoning. Toss everything together using your hands. (You can use a spoon but it is so much more fun with your hands!)
In a medium mixing bowl, whisk together the eggs, milk, half and half, Dijon mustard, cayenne pepper, the remaining 1 teaspoon salt, and the remaining 1/2 teaspoon black pepper.
Coat the bottom and sides of a 9 x 13 baking dish with 1 tablespoon of butter. Transfer the bagel mixture to the baking dish and spread it out evenly.
Pour the egg mixture over the bagel mixture. Once all the liquid is in the dish, press down on the bagel pieces with your hand so they are covered with the egg mixture. (It's ok if they poke out as long as they have soaked up some of the liquid.)
Tuck the cream cheese pieces evenly throughout the top of the bagel mixture. (These will be peeking out too!) Cover with aluminum foil and refrigerate for at least 2 hours and up to 12 hours. The longer everything soaks, the better!
Preheat the oven to 400 degrees with the oven rack set in the middle. Uncover the casserole and sprinkle 1/2 shredded Gruyere and 1/2 shredded Cheddar. Bake for 15 minutes. Reduce the oven temperature to 350 degrees and bake for 50-60 minutes or until the top is golden brown and the center is set.