Whats the best way to slice your level up into small chunks to be processed and checked inside collision and stuff? Can anyone give me a bit of implementation inside c#?
There is no best way, it depends on what you need. For 2D, the simplest is probably just a regular grid of cells - this is suitable for smaller spaces or if you are already working to a grid e.g. tile-based games. You could use a quad-tree if you have objects of greatly-varying size or if you have a really large space and only need to store data where there are objects. Or you could divide up space intelligently if you have a rooms system for example, so that each room has its own collision list or grid.
Also giving partitions their own mini-partitions to speed up collision checks even more?
It can do yes, depending on the space you're using and how deep your layers are. For a quad-tree, where each square can have up to four children (each of a quarter size of the square), and each of those children can have four children etc., traversing the tree can become a massive pain in the neck. And also if you have objects overlapping boundaries, they can end up in some of the very large boxes near the bottom of the tree and end up being tested against things that are miles away.
Also what happens, when say, an enemy moves from inside one partition to another?
Entities could be present in many partitions at once, this avoids entities moving from one partition to another and suddenly appearing right in the middle of another entity. But typically each box would have a list of present entities, and when an entitiy leaves the box you remove the entity from the list and add it to whatever new box it has entered.