Both your draw and your update functions are working on the "main" instance of bullet. Instead, you need to run a foreach:
foreach (Bullet b in bullList)
{
b.rectangle = new Rectangle((int)b.position.X, (int)b.position.Y, (int)b.size.X, (int)b.size.Y);
b.position += (b.velocity * b.speed);
}
And a similar one for the draw loop.
That being said, I wouldn't do it this way. Bullets do not "have" bullets, a BulletManager might though. In other words, your main "bullet" has a list of all the "actual" bullets, and all the position variables aren't used, and the "actual" bullets have a list of sub-bullets they don't really need, but they use all the position variables. Sounds like a good case for two different objects to me :).
A few other things I noticed, the "Owner" enum is never used, neither is the "IsAlive" property. That might just get added later, but the lack of "IsAlive" could cause a performance issue after enough "fires" in testing.