Olá Kakofonia 
A espiral quadrada é desta maneira mesmo que você desenhou (conforme o livro pedia) :?: :!:
Caso sim, só faltava a espiral aumentar junto com a tela, para isto mudei de JPanel para JFrame, só para ficar mais fácil, porque senão você teria que guardar o tamanho do JFrame em variáveis e passá-las a cada movimento ao JPanel.
Outras pequenas mudanças expliquei no código, logo a baixo:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class EspiralQuad extends JFrame {
private final int passos = 10;
public EspiralQuad() {
setSize(200, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
@Override
public void paint(Graphics g) {
super.paint(g);
//*****cria um cópia do contexto gráfio atual, para não atrapalhar a chamada do método por outras classes*****
Graphics2D g2d = (Graphics2D) g.create();
// coordenadas do centro da espiral
int coordX = getWidth() / 2;
int coordY = getHeight() / 2;
// coordenadas da outra ponta da linha
// a coordenada X fica estática na primeira linha, mas a Y muda pra maior
int coord2X = getWidth() / 2;
// resolvi fazer por passos pra poder redimensionar a tela e a espiral redimensionar também
int coord2Y = getHeight() / 2 + (getHeight() / passos);
g2d.setColor(Color.blue); // muda a cor das linhas para azul
// início do loop for que desenha as linhas e muda os valores das coordenadas
for (int contador = 1; contador <= passos; contador++) {
// desenha a primeira linha com os valores iniciais
g2d.drawLine(coordX, coordY, coord2X, coord2Y);
// decide se o contador é par ou ímpar
if (contador % 2 == 1) {
// muda a coordX e coordY para desenhar a outra linha
// caso o contador for ímpar
coordX -= contador * (getWidth() / passos);
coordY += contador * (getHeight() / passos);
} else {
// muda a coordX e coordY caso contador seja par
coordX += contador * (getWidth() / passos);
coordY -= contador * (getHeight() / passos);
}
// desenha a outra linha a partir do ultimo ponto
g2d.drawLine(coord2X, coord2Y, coordX, coordY);
// muda os valores para desenhar de onde parou
if (contador % 2 == 1) {
// muda a coord2X e coord2Y caso seja ímpar
coord2X -= contador * (getWidth() / passos);
// aqui o calculo inclui 1 ao contador para a altura ser o dobro
// da ultima linha vertical
coord2Y -= (1 + contador) * (getHeight() / passos);
} else {
// muda a coord2X e coord 2Y para desenhar a outra linha
// mesmo caso da anterior em relação ao 1 + contador
coord2Y += (1 + contador) * (getHeight() / passos);
coord2X += contador * (getWidth() / passos);
}
}
//*****encerra os gráficos neste contexto e libera os recursos do sistema que está usando*****
g2d.dispose();
g.dispose();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new EspiralQuad().setVisible(true);
}
});
}
}
O restante do código não mexi, porque você já fez certo. Também não deixei o código mais enxuto, porque teria que mudar a lógica que você utilizou, mas não se preocupe com isto, você fez tudo certinho e otimizações no código você mesmo consegue fazer 
Qualquer dúvida, é só postar