64-bit is a fairly generic term that is usually used when referring to a system, component or software that can operate on items (integers, memory locations, etc) that are 64bits long in a single operation.
x64 (or x86-64, or AMD64, or Intel 64, also previously know as IA-32e and EM64T) is an extension to the x86 instruction set, providing support for 64-bit registers, memory space and the like. It is fully backwards compatible with the 32-bit x86 instruction set (allowing 32-bit software to be compatabile without modification in most cases) and is usually taken to simply mean a 64-bit instruction set.
However, a processor that impliments the
x64 instruction set is therefore
64-bit, but the opposite is not true - there are other
64bit instruction sets - so the two are not synonyms (although, as said, they are sometimes used as such in the home user computing market).
Dual core (or more) simply means that the processor provides two (or more) distinct physical cores to allow the processor to work on multiple tasks concurrently. Software that is designed to take advantage of multi-core processors will usually operate faster, software that is not programmed for this advantage or that have bottlenecks elsewhere (ie, network or hard drive access) will not be improved in most cases.
A processor can be multi-core and not be 64-bit, and conversly a single core process can be 64-bit (of any 64-bit instruction set). Number of cores is entirely unrelated to bit-ness.