Bueno me parece bien que separes así el problema.
Mi recomendación era que dejes para tu módulo la parte de reordenar los campos nada más. Si creas los campos desde el profile y los haces visible en el formulario de registro entonces solo te quedará la parte de maquetación y reordenamiento.
Usar un tpl para el formulario es una buena opción pero si deseas en el tpl poder hacer un print de cada campo por separado pienso que tendrás muchos dolores de cabeza.
Lo mismo si querés agregar los campos desde un módulo personalizado. Tendrías que hacer las operaciones de guardar y actualizar información.
Por eso mi recomendación es que uses los campos del profile y solo te centres en reordenar el formulario y maquetarlo.
Ahora bien, creo que el código que tenes puesto no sirve de mucho si lo vas a hacer como yo te lo planteo. Pero te dejaré una introducción y vos luego decidís que es mejor.
Los campos del formulario están ordenador por peso, es decir, por la variable #weight, entonces debes depurar la variable $form y ponerle el peso al campo que quieras poner primero de modo que salga primero, es decir, un valor muy bajo.
Código PHP:
Ver original$form['search_block_form']['#weight'] = 1;
Eso por ejemplo. No se exactamente si ese es un campo del formulario, pero si le pones un peso muy bajo se va arriba del todo.
Así lo deberías hacer con los demás.
Ya me contarás que tal te ha ido.
Saludos.