This is easier than it looks, breakpoints do not need to be removed (but doing so doesn't hurt) as the step will always go to the handler.
This is an interesting case. The TaskState mechanism is currently not setup to preventively remove any breakpoints. Is there any mechanism to definitely know that a Task has any pending signals? I assume that a signal could become pending during the next ptrace-step and if so the step ends up in the signal frame.