If all the above works and does not return errors (you
should check that
your application's PID is in /dev/cpuset/socket0/tasks
while running),
bind-to-core won't clash with it, at least when using a
OMPI that uses
hwloc for binding (v1.5.2 or later if I remember
correctly).

My concern is that hwloc is used before the application
begins executing and so mpirun might use it to bind the
application to different cores than the ones I want them
to bind to.

Ah right, they could be a problem here. MPI can bind at two
different times: inside mpirun after ssh before running the actual
program (this one would ignore your cpuset), later at MPI_Init
inside your program (this one will ignore your cpuset only if you
call MPI_Init before creating the cpuset).