Eles são diferentes.
Funções de primeira classe
Os valores em um idioma tratado de maneira uniforme são chamados de "primeira classe". Eles podem ser armazenados em estruturas de dados, passados como argumentos ou usados em estruturas de controle.
Pode-se dizer que idiomas que suportam valores com tipos de função e os tratam da mesma forma que valores sem função, têm "funções de primeira classe".
Funções de ordem superior
Uma das conseqüências de ter funções de primeira classe é que você deve poder passar uma função como argumento para outra função. A última função agora é de "ordem superior". É uma função que assume uma função como argumento.
O exemplo canônico é "mapa"
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : map f xs
Ou seja, ele pega uma função e uma matriz e retorna uma nova matriz com a função aplicada a cada elemento.
Idiomas funcionais - idiomas em que as funções são o principal meio de criação de programas - todos têm funções de primeira classe. A maioria também possui funções de ordem superior (exceções muito raras são linguagens como o Excel, que podem ser consideradas funcionais, mas não de ordem superior).