Are eggs predetermined before you hatch them?

Yes, they are already predetermined (experience and research from thousands of players over at the subreddit /r/pokemongo).
This is so, because no matter at what level you are right now, the Pokémon that hatches is limited by the level you were when you got that egg.

Example:
You are level 10 and get an egg.
Now at level 20 you decide to hatch it.
It will be as strong as limited by level 10 and not level 20, because it's already predetermined (like in the original Pokémon games)


There are now numerous indications the contents of an egg is predetermined.

  • As mentioned in the question, Eggs have a Pokemon ID number, which continues to be their number after they hatch.
  • As mentioned in GiantTree's answer, the level of a hatchling is determined by the level you had at the time you attained the egg. It is equal to your trainer level at that time, up to a maximum of level 20.
  • Movesets are apparently determined at the time you find an egg. This was evidenced by the patch on August 19th, which effected changes to the moves that could be found in several species. Some eggs generated before this change were found to have legacy movesets. Note that this means the species of the Pokémon was also pre-determined.
  • A Pokémon's geographic origin is, for hatchlings, attributed to the location their egg was found.
  • During the Halloween Event at the end of October, the spawn rates of certain spooky Pokémon like Meowth and Ghastly was vastly increased. The eggs which people had stockpiled prior to the event contained ordinary assortments, but those who hatched enough eggs to pick up several during the event reported that their contents adhered to the Halloween spawn rates.

This really only leaves IVs as an attribute which could be sensibly left until the hatch event to be determined. That said, good data has consistently shown egg IVs to be evenly distributed between 10 and 15, and no rigorous means of affecting these stats has been documented thus far.

Programmatically, it would make the most sense that Eggs actually are Pokemon, already, and that their various attributes simply aren't transmitted to the game client until they're hatched. This is supported in various ways:

  • By exploiting the deobfuscated game API, there was a short period where hackers were able to place eggs in gyms, exactly as though they were Pokémon. (Because their combat parameters were obscured, a fight with these prenatal defenders resulted only in errors, and they were an intractable problem until Niantic saw to the problem)
  • Eggs count against the general limit of a player's Pokémon box. Seriously, go count.
  • For many weeks after the game's release, egg hatching events were not logged in the player's journal. This makes sense if you consider that the egg hatching event is not actually the moment the Pokémon is added to the player's inventory.

Probably some other circumstantial evidence, too.

There is one contrary point I can think of:

  • A hatchling's time of acquisition is set to the moment they hatch, not the moment their egg was found. I think this is actually coherent with the theory, however, given that hatch events were not initially reported in the player's journal; by setting the Pokemon's date of acquisition to its hatch date, the game ends up sorting it as a recent event and then displays it as such in the journal.