I use the PIC32 in a couple of projects and I think they're great. I'm using them to drive a 320x240 color graphic LCD among other things. There are a few things I don't like about them but the majority of my dislikes stem from the fact that I dislike Microchips documentation.
One thing I don't like about the PIC32 that I got used to on the smaller PICs (not sure if all smaller pic's have them or not though) is the lack of a set bit in register instruction. Now, when you clear a flag or modify a register, its not guaranteed to be atomic. So if you want to set an output pin its a read/modify/write and if you get interrupted between read and write the potential exists to read, modify, interrupt, modify same register, exit interrupt, overwrite what the interrupt just wrote. So now there are annoying set and clear registers. Just gotta be careful now.
I also wish they came in a 1 meg flavor. I'm sitting on 98% utilization of a PIC32 512k part and around 80% utilization on another PIC32 512k part.
And optimization is TERRIBLE!!!! 0.07% space savings from turning optimization all the way up vs having it off. But I've never been impressed with the optimization with any of the PIC compilers. There is no reason for "for (i = 0; i < 100; i++);" to compile into code unless i is declared volatile. Neither hi-tech nor microchip's compiler seems to do optimize it out though.