The reason why adding a delegate onto the preview up event is it's a multicast delegate - they all get fired. With routed events you can stop other events from firing by setting the event args to handled.
If you're not familiar with routing strategies look those up briefly, but in the case of preview key events the routing strategy is tunneling. That means if your ComboBox is attached to the key events it's events will fire first.
Sure enough if you preview the key up event on hitting a down arrow it will never get fired. Something is previewing that event, recognizing it's a down arrow, and setting handled to true. Makes sense in this case normally right?
Oddly I couldn't get it to stop the event with the template at the ComboBox level. Not sure if I missed something, but I added a preview key event for the Window and it intercepted it just fine. It would be best to put it the ComboBox inside another container and intercept at that level, but if you use something like this it can help:
if (e.Source is ComboBox && e.Key == Key.Down)
{
e.Handled = true;
}
NOTE: When debugging the preview key events in a container I was tossing errors after continuing - odd. Still worked though...