What is a good way to in-circuit update the program on a SyncMOS 5964?
I can't answer the 8051 specific questions, but I can help with your first problem.  

The standard method for doing this in industry (at least as far as I can tell) is to use pogo pins:

(source: sparkfun.com)    

The gold part sticks through some protoboard or another PCB.  You connect your programmer to this circuit.  This piece of PCB (or something thicker and sturdier like masonite or acrylic if you're doing hundreds of boards) also has larger pins which go through holes in your target board, to precisely locate your target board above the pogo pins.  Light down pressure on the board makes contact between the spring-loaded pogo pins and the test points on the target PCB.

The company I work at uses this kind of pins to program every one of the millions of circuit boards they make every year, and every trace has a tiny test point which is probed by a tester through these pins. 

If you want a debug header, there are other standard methods.  I'm totally unfamiliar with this chip, so I can't answer that for you.  8, 14, and 20 pin headers are common for other devices.  

EDIT:
I took a quick look at the datasheet, and found on page 10:


  3. In-System Programming (ISP) Function
  The SM5964 can generate
  flash control signal by internal
  hardware circuit. User utilize flash
  control register, flash address
  register and flash data register to
  perform the ISP function without
  removing the SM5964 from the system.
  The SM5964 provides internal flash
  control signals which can do flash
  program/chip erase/page erase/protect
  functions. User need to design and use
  any kind of interface which SM5964 can
  input data. User then utilize ISP
  service program to perform the flash
  program/chip erase/page erase/protect
  functions.
  3.1 ISP Service Program
  The ISP service program is a user developed
  firmware program which resides in the
  ISP service program space. After user
  developed the ISP service program,
  user then determine the size of the
  ISP service program. User need to
  program the ISP service program in the
  SM5964 for the ISP purpose. The ISP
  service program were developed by user
  so that it should includes any
  features which relates to the flash
  memory programming function as well as
  communication protocol between SM5964
  and host device which output data to
  the SM5964. For example, if user
  utilize UART interface to
  receive/transmit data between SM5964
  and host device, the ISP service
  program should include baud rate,
  checksum or parity check or any
  error-checking mechanism to avoid data
  transmission error. The ISP service
  program can be initiated under SM5964
  active or idle mode. It can not be
  initiated under power down mode.  


So, it looks like you can provide a bootloader program to read in the data from any interface you like.  This can be some GPIO or the UART that you access with pogo pins, or go to an existing connector on the board. How do you get this program to run?


  3.4 Initiate ISP Service Program
  To initiate the ISP service program is to
  load the program counter (PC) with
  start address of ISP service program
  and execute it. There are two ways to
  do so:
  (1) Blank reset. Hardware
  reset with first flash address blank
  ($0000=#FFH) will load the PC with
  start address of ISP service program.
  (2) Execute jump instruction can load
  the start address of the ISP service
  program to PC.


However, I have no idea how you're supposed to get the ISP program on the blank chip. This page has a few programs and programmers, the MSM9042 looks closer to what you want for in-circuit (not socketed) programming.