I have used ASM with PICs. Things are simple with ASM when you are doing simple things, but when you start needing things like large value (>8 bit or floating point) arithmetic, string parsing, multitasking operating system or any communications protocol, things go very difficult to maintain very quickly and whole thing becomes a pain and you'll find yourself re-inventing the wheel instead of developing your own system.
I have mostly moved into MSP430 for casual MCU needs, and I use mainly C with it (mspgcc), although it is very beneficial to know the assembly so you can check the compiler output in case of doubt. My current coding philosophy is that do not optimize too early, instead try to obtain smart program algorithm overall. That gets most optimization.
If there are some time critical sections in the code, then they can be optimized into ASM if required, but writing whole complex program in ASM is sheer madness. By complex I mean substantially more complex than simple "led flasher". I think that it does not matter if you use 70 or 90% of code space or 70 or 90% of CPU cycles if it does what you want. The difference between assembly and C is not even that big, unless compiler is flawed somehow. Only in specialized occasions (like in DSP filter kernels), human knowledge of CPU assembly features can shrink speed and code size considerably.
Regards,
Janne