Un proxy expone exactamente el mismo comportamiento que el objeto que oculta. Por lo general, un proxy se usa para contactar un objeto remoto sin tener que saber cómo contactarlo. Un ejemplo es un servicio WCF, puede encapsular el acceso al servicio en un proxy que expone exactamente la misma interfaz que el servicio wcf, pero oculta los detalles de implementación, como usar un canal de televisión y manejar las malas comunicaciones, etc ... Es como si su cliente estuviera hablando al servicio de WCF localmente.
Un adaptador también oculta un objeto subyacente, pero transforma los datos que usted intercambia con el formato y el contenido correctos utilizados por el objeto subyacente. Un ejemplo es, de hecho, un sistema heredado, como dice Goblin. Encapsula la complejidad de hablar con el sistema heredado (tal vez utiliza una API conversátil o CRUDy y desea ocultarlo detrás de una operación de granularidad gruesa) en un adaptador para proporcionar una forma sencilla de hablar con el sistema heredado a sus clientes.
Así es como lo entiendo al menos.
EDITAR: por cierto, personalmente creo que no tiene que ver los nombres de patrones de diseño como el fin de todo. Elija el patrón correcto en función de lo que desea lograr y llámelo como lo desee.