En primer lugar, un par de recomendaciones:
1) Usa variables mas descriptivas, no uses 'a' y 'b' como nombre de variables, porque en un programa mas complejo te perderás, usa, por ejemplo, condicion1, y condicion2.
2) Tampoco uses NUNCA acentos en el código, puede darte problemas a posterior y también problemas si ejecutas el código en una máquina linux, perdiendo así la gracia del multiplataforma de java.
3) Usa plurales para los arrays, en este caso, caracteres, te sera mas visual, sino, te puede pasar cosas como que el código que me has pasado, usas la variable carácter tanto como un char como un array.
4) Te he modificado toda la serie de condiciones por un método del String, para ello, necesitas un String con las vocales.
Después de comentar esto, espero haber entendido bien el programa, te pongo el código modificado, no acostumbro a resolver ejercicios enteros, pero esta claro que te lo has trabajado así que haré una excepción.
Lo único que no me ha quedado claro, es si se tienen que dar las dos condiciones o solo con una basta, yo he hecho el programa con que solo con una baste, sino la modificación es mínima.
public static void main(String[] args) {
//Preparamos un string con las vocales
String vocales = "aeiou";
String sPalabra = "En un lugar de la Manacha";
sPalabra = (sPalabra.toLowerCase());
char[] caracteres = sPalabra.toCharArray();
//El bucle subimos de 2 en 2 para estar siempre en posiciones pares
for (int i = 1; i < sPalabra.length() - 1; i++) {
char caracterActual = caracteres;
boolean condicion1 = false;
boolean condicion2 = false;
//Una de las condiciones, (la 'b' que me pusistes) es simplemente que sea una vocal y que este en una posicion par
if (i % 2 != 0 && vocales.indexOf(caracterActual) != -1) {//la funcion indexOf, nos devuelve la posicion en el string de vocales del caracter que le pasamos, o -1 si no lo encuentra
condicion1 = true;
}
//La otra condicion (la 'a' que me pusistes) es que sea una vocal, que este entre consonantes.
char caracterAnterior = caracteres[i - 1];
char caracterPosterior = caracteres[i + 1];
if (vocales.indexOf(caracterActual) != -1 //miramos que el caracter sea vocal
&& ! Character. IsWhitespace(caracterAnterior) //comprobamos que el caracter anterior NO sea un espacio
&& !Character.isWhitespace(caracterPosterior) //comprobamos que el caracter posterior NO sea un espacio
&& vocales.indexOf(caracterAnterior) == -1 //comprovamos que el caracter anterior NO este en la lista de vocales
&& vocales.indexOf(caracterPosterior) == -1) { //Finalmente, comprovamos que el caracter posterior NO este en la lista de vocales
condicion2 = true;
}
if (condicion1 || condicion2) {
caracteres = Character.toUpperCase(caracterActual);
}
}
System.out.println(caracteres);
}
Espero haber aclarado del todo tus dudas, un placer