Pixel Perfect collision detection is expensive. I can't say that is the only problem, but I can tell you it's expensive in terms of processing.
Creating a new bitmap each iteration in this loop is also expensive.
One thing you can try is to eliminate objects before doing the more intensive checking. For example a very quick distance check can eliminate the need to test for an object if they aren't within a certain distance.
if (distance <= threshold)
{
// create the bitmap for the check
// do the expensive pixel perfect collision check
}
Your goal is to eliminate objects that are obviously not close enough to collide.