Implement Menu block hook function hook_menu_block_tree_alter() to add/change/remove classes
Other than the regular clear cache I am not sure why that would not be called. I do not have much experience with that hook. However I am fairly certain theme_menu_link would work here as well. Take a look at the answer here. A test for $vars['element']['#below'] should allow you to accomplish what you want.

Note: If you have a small menu you can always add classes to menu items through the UI.

EDIT: To answer part 1 try something like this (taken from bootstrap_menu_link):

if ($element['#below']) {
  if ((!empty($element['#original_link']['depth'])) &amp;&amp; ($element['#original_link']['depth'] == 1)) {
    // Add our own wrapper.
    unset($element['#below']['#theme_wrappers']);
    $sub_menu = '&lt;ul class="dropdown-menu"&gt;' . drupal_render($element['#below']) . '&lt;/ul&gt;';
    // Generate as standard dropdown.
    $element['#title'] .= ' &lt;span class="caret"&gt;&lt;/span&gt;';
    $element['#attributes']['class'][] = 'dropdown';
    $element['#localized_options']['html'] = TRUE;

    // Set dropdown trigger element to # to prevent inadvertant page loading
    // when a submenu link is clicked.
    $element['#localized_options']['attributes']['data-target'] = '#';
    $element['#localized_options']['attributes']['class'][] = 'dropdown-toggle';
    $element['#localized_options']['attributes']['data-toggle'] = 'dropdown';
  }
}