Olhei o jogo que vc tem como objetivo final, e pra minha surpresa, não tem nada pra arrastar la hehe mas tudo bem …
O atributo painelInicial ficaria na classe que movimenta o componente, e vc poderia referenciar ele no mousePressed
alterei o exemplo mais uma vez, agora ele só deixa trocar de painel se formar a palavra ABC, caso contrário ele volta para o panel
que ele saiu, da uma testada ai …
O JFrame …
public class JFMoveComp extends JFrame {
	private JLabel labelA;
	private JLabel labelB;
	private JLabel labelC;
	private JPanel panel1;
	private JPanel panel2;
	private JPanel panel3;
	private JPanel panel4;
	public JFMoveComp() {
		initGUI();
	}
	private void initGUI() {
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLayout(null);
		setSize(714, 500);
		setLocationRelativeTo(null);
		getContentPane().setBackground(Color.black);
		{
			panel1 = new JPanel();
			getContentPane().add(panel1);
			panel1.setLayout(null);
			panel1.setBounds(22, 20, 263, 174);
			panel1.setBorder(new LineBorder(Color.black));
		}
		{
			panel2 = new JPanel();
			getContentPane().add(panel2);
			panel2.setBorder(new LineBorder(Color.black));
			panel2.setLayout(null);
			panel2.setBounds(41, 217, 263, 237);
		}
		{
			panel3 = new JPanel();
			getContentPane().add(panel3);
			panel3.setBorder(new LineBorder(Color.black));
			panel3.setLayout(null);
			panel3.setBounds(393, 43, 263, 174);
		}
		{
			panel4 = new JPanel();
			getContentPane().add(panel4);
			panel4.setBorder(new LineBorder(Color.black));
			panel4.setLayout(null);
			panel4.setBounds(354, 261, 203, 130);
		}
		{
			labelA = new JLabel("A");
			panel1.add(labelA);
			labelA.setHorizontalAlignment(JLabel.CENTER);
			labelA.setOpaque(true);
			labelA.setBackground(Color.blue);
			labelA.setForeground(Color.white);
			labelA.setBounds(15, 15, 50, 49);
			MoveComponentListener l = new MoveComponentListener(panel1,panel2, panel3, panel4);
			labelA.addMouseListener(l);
			labelA.addMouseMotionListener(l);
		}
		{
			labelB = new JLabel("B");
			panel2.add(labelB);
			labelB.setHorizontalAlignment(JLabel.CENTER);
			labelB.setOpaque(true);
			labelB.setBackground(Color.red);
			labelB.setForeground(Color.white);
			labelB.setBounds(15, 15, 50, 49);
			MoveComponentListener l = new MoveComponentListener(panel1,panel2, panel3, panel4);
			labelB.addMouseListener(l);
			labelB.addMouseMotionListener(l);
		}
		{
			labelC = new JLabel("C");
			panel3.add(labelC);
			labelC.setHorizontalAlignment(JLabel.CENTER);
			labelC.setOpaque(true);
			labelC.setBackground(Color.green);
			labelC.setForeground(Color.white);
			labelC.setBounds(15, 15, 50, 49);
			MoveComponentListener l = new MoveComponentListener(panel1,panel2, panel3, panel4);
			labelC.addMouseListener(l);
			labelC.addMouseMotionListener(l);
		}
	}
	
	public static void main(String[] args) {
		new JFMoveComp().setVisible(true);
	}
}
e o listener
public class MoveComponentListener extends MouseAdapter{
	private int baseX = -1;
	private int baseY = -1;
	private Rectangle2D r2d;
	private JPanel[] panels;
	private JPanel panelIni; //Painel Inicial(que o componente volta caso esteja no lugar errado)
	private Point posIni; // posição que ele volta
	public MoveComponentListener(JPanel... panels) {
		this.panels = panels; //O LISTENER PRECISA CONHECER OS PAINEIS
		this.r2d = new Rectangle2D.Double(); //RECTANGLE2D QUE REPRESENTA A POSIÇÃO DO COMPONENTE FORA DO SEU PAINEL
	}
	@Override
	public void mouseDragged(MouseEvent e) {
		if ((baseX != -1) && (baseY != -1)) { 
			Component c = e.getComponent();
			Container p = c.getParent(); //O PAINEL QUE O COMPONENTE ESTA
			int x = c.getX() + e.getX() - baseX;  
			int y = c.getY() + e.getY() - baseY;  
			c.setLocation(x, y);  
			c.repaint();  
			//VERIFICA SE O COMPONENTE SAIU FORA DO SEU PAINEL
			if(c.getX() > p.getWidth() || c.getY() > p.getHeight() || c.getX()+c.getWidth()<0 || c.getY()+c.getHeight() < 0)
				mudaPanel(c);
		}  
	}
	@Override
	public void mousePressed(MouseEvent e) {
		baseX = e.getX();  
		baseY = e.getY();
		if(panelIni == null)
			panelIni = (JPanel)e.getComponent().getParent(); //salva o painel inicial
		if(posIni == null)
			posIni = e.getComponent().getLocation(); //salva a posição inicial
	}
	@Override
	public void mouseReleased(MouseEvent e) {
		baseX = -1;  
		baseY = -1;
		//NÃO DEIXA SOLTAR O COMPONENTE FORA DE UM PAINEL
		Component c = e.getComponent();
		Container p = c.getParent();
		int x = c.getX();
		int y = c.getY();
		if(c.getX()+c.getWidth() > p.getWidth() )
			x = p.getWidth() - c.getWidth();
		if(c.getY()+c.getHeight() > p.getHeight() )
			y = p.getHeight() - c.getHeight();
		if(c.getX() < 0)
			x = 0;
		if(c.getY() < 0)
			y = 0;
		c.setLocation(x, y);
		if( p!=panelIni && !verificaPalavra(p) ) { //verifica se não esta movendo dentro do próprio panel dele
			//caso a verificação seja falsa, volta para o panel inicial e para a sua posição
			p.remove(c); 
			panelIni.add(c);
			c.setLocation(posIni);
			p.repaint();
		} else { //senão salva o seu novo painel como sendo o inicial, e tambem para a posição
			panelIni = (JPanel)p; 
			posIni = c.getLocation();
		}
	}
	private boolean verificaPalavra(Container p) {
		String palavra = ""; 
		for(Component c:p.getComponents())//percorre os componentes do painel que ele esta
			palavra += ((JLabel)c).getText(); // forma a palavra com o texto dos componentes
		System.out.println(palavra+"\n"); 
		return (palavra.equals("A")||palavra.equals("AB")||palavra.equals("ABC")); //verifica se é uma palavra válida (boolean)
	}
	private void mudaPanel(Component c) {
		Container atual = c.getParent();
		//RECTANGLE2D (POSIÇÃO) DO COMPONENTE FORA DO SEU PAINEL
		r2d.setRect(atual.getX()+c.getX(), atual.getY()+c.getY(), c.getWidth(),c.getHeight());
		for(JPanel novo:panels){ //PERCORRE OS PAINEIS QUE ELE CONHECE
			if(novo!=atual && r2d.intersects(novo.getBounds())){ //VERIFICA SE O COMPONENTE ESTA DENTRO DE OUTRO PAINEL
				atual.remove(c); //REMOVE ELE DO SEU PAINEL ATUAL
				novo.add(c); //E INSERE DENTRO DO NOVO PAINEL
				c.setLocation( //REPOSICIONA O COMPONENTE DENTRO DO SEU NOVO PAINEL
						(int)(r2d.getX()-novo.getX()),
						(int)(r2d.getY()-novo.getY())
						);
				break;
			}
		}
	}
}
se vc é iniciante em java, e quer aprender o básico sobre orientação a objetos, estude a apostila fj-11 da Caelum, é a melhor que eu conheço …
vc pode baixar gratuitamente aqui:
http://www.caelum.com.br/curso/fj-11-java-orientacao-objetos/