Wow, that's a tricky bug. It turns out that you have two instances of World. One instance is the active simulation, the other is being used for rendering -- and when it tries to look up its bees in beeLookup, they haven't moved (because the simulation has been updating the first World instance).
You can see this for yourself by doing this:
1. Run the program.
2. Put a breakpoint in Renderer.Render().
3. When the program breaks, add a watch for "world".
4. Right-click on your world watch and choose "Make Object ID" -- we teach about this feature in the third edition. It assigns an ID to each unique object. In this case, it will assign this instance of World ID #1.
5. Put a breakpoint in Bee.Go() and keep hitting F5 until it breaks there.
6. Right-click on your world watch and choose "Make Object ID" again. This time it should give it ID #2. This means that the Bee object's world field points to a different object than the Renderer's world field.
When I search for "new World(" in the solution, I see that you're creating a new instance of World in both resetSimulation_click() and ResetSimulator() in Form1.cs. You only want to create a single instance of World.
(If you want to learn a little bit about design patterns, this is a great opportunity to learn about the Singleton pattern.)
Anyway, you are 100% forgiven for not being able to find that one. It was a really nasty little bug!